原來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 =
不理會也罷,記住了用法,腦細胞也死了不少。前面的基本約定知道了就基本夠用了。
模塊
