在typescript中名称空间和模块之间有什么区别

Mau*_*ano 16 namespaces module typescript

我已经使用了几个月的打字稿,但我还没有理解命名空间和模块的区别.

我知道在他们被命名为内部外部模块之前,但我同时可以从其他文件导入类.那真正的区别是什么?

Иск*_*вов 5

正如TS手册中所述 ,模块分为2种:“内部”和“外部”。内部模块中的代码用Typescript编写,“外部”用Javascript编写。

为了与新的ECMAScript 2015术语保持一致,他们决定重命名它们,如下所示:

  1. 现在,“内部模块”是“命名空间”。
  2. 现在,“外部模块”只是“模块”,以与ECMAScript保持一致

所以:

  • 编写代码的方式不同
  • 使用模块时,使用命名空间时,类不会在全局范围内公开:

例:

假设您有公开名称空间的序列NamespaceA.NamespaceB.NamespaceC,该序列公开了public class ClassD。您可以通过以下方式全局访问所有这些:

window.NamespaceA
window.NamespaceA.NamespaceB
window.NamespaceA.NamespaceB.NamespaceC
window.NamespaceA.NamespaceB.NamespaceC.ClassD
Run Code Online (Sandbox Code Playgroud)

不用说 window.NamespaceA = NamespaceA

如果使用模块,则必须使用上面的“魔术”


tos*_*skv 3

当您不希望输出的 Javascript 代码使用模块加载器时,命名空间是 TypeScript 构建代码的方式。

您可以在此处的手册中找到有关命名空间与模块的更多信息。