TypeScript的命名空间和模块

原来TypeScript有内部模块,外部模块,我没见过是啥样的。后来ES6(ES2015)标准发布了,TypeScript现在处理命名空间和模块的标准见下面三个翻译官网的文档。

模块  https://www.tslang.cn/docs/handbook/modules.html

命名空间  https://www.tslang.cn/docs/handbook/namespaces.html

命名空间和模块 https://www.tslang.cn/docs/handbook/namespaces-and-modules.html

 

要把module和namespace看做一样的东西。带export在module或namespace上,就需要使用时import,不带export就不需要import,可以全局访问。不建议多层嵌套。除非是namespace,它有时有namespace A.B.C{ 的需求

module和namespace里面的东西需要暴露的就也需要export

例如 export module A{ export class B

记得把 tsconfig.json 里面的 "module" 配置修改成 UMD,他表示你编译出来的 javascript 可以适应 commonjs 装载规则,也可以适应 amd 装载规则

 

简单说,TypeScript 处理模块和空间有几个约定

模块就看做ES6的模块,一个文件一个模块是共识。

同名命名空间可以分散各个ts中

模块和命名空间在同一ts文件中就不要混用合用了

一般认为模块是内部的,ts中需要import才能暴露出来。在前端代码中,在手写的其他javascript中一定需要require才能找到。

一般认为命名空间是全局的,会污染环境,ts中也需要通过import才能找到。在前端代码中,在手写的其他javascript代码中,直接引用全局变量也是可以找到的(当然之前要先include),require也是可以找到。

一般认为module声明需要export。所以服务端的module不带export别人就没法用了(因为不像客户端可以通过include先加入)

一般认为namespace声明不应要export(主要给客户端html用,只要include顺序对了,直接全局限定名就可以访问)。如果namespace也带export,你就认为这是namespace和module作用一样就是了,失去了全局访问的可能性。

其他的

export default

export =

import = 

不理会也罢,记住了用法,脑细胞也死了不少。前面的基本约定知道了就基本够用了。

 模块

export module M3
{
    export class C3
 
posted @ 2018-12-17 17:49  我虐TypeScript千百遍  阅读(4682)  评论(0编辑  收藏  举报