【问题标题】:How to import typescript namespace spanning multiple files without export keyword如何在没有导出关键字的情况下导入跨越多个文件的打字稿命名空间
【发布时间】:2018-07-26 22:54:23
【问题描述】:

我有一组基本上所有模型/枚举的类。我想将所有这些类放在同一个命名空间下,这样我就不需要任何导入语句。

现在还有其他业务层类需要使用这些模型。

我的问题是,为了让我的业务层使用模型,我需要导出模型命名空间,但是当我这样做时,模型类无法共享任何内容。

有没有办法导出跨多个文件的命名空间

namesace models {
  export class Employee {
  }
}

namespace modesl {
  export class Manager {
    //using Employee class
    //no need to import because they are in same namespace
  }
}

//need to import employee to services namespace
//This gives the error cannot find name Employee
import { Employee } from '../models/Employee'

namespace services {
  //Use Employee and Manger 
}

【问题讨论】:

  • 只要您不导入或导出您想要贡献给全局命名空间的任何文件中的任何内容,您所描述的内容就可以正常工作。
  • 我已经用一个例子更新了我的问题,我没有在我的模型命名空间中导入导出任何东西,但是当尝试将任何类从该命名空间导入另一个命名空间时它不起作用
  • 你不应该这样做。由于您的模型是类而不是接口,因此它将导致您出现各种文件排序和模块加载问题。如果它们代表服务器请求/响应值,请将它们全部设为interfaces 或types。您的代码将提高质量,并且您在此处尝试的方法实际上是可能的。请注意,使用类来表示被序列化和反序列化的值是一个严重设计错误。

标签: typescript typescript2.0


【解决方案1】:

有没有办法导出跨多个文件的命名空间

简单:

export const NewName = GlobalNamespaceName; 

【讨论】:

  • 在进行构建时,这给了我与以前相同的错误找不到名称“模型”。
  • 请注意,我没有导出 Models 命名空间,因为我希望 Models 命名空间内的所有类都能够在没有任何导入的情况下看到其他类。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-02
  • 2016-11-05
相关资源
最近更新 更多