在 TypeScript 中,命名空間和模組之間有什麼區別
我已經使用 typescript 一段時間了,但我仍然不理解命名空間和模組之間的差異。
我知道在它們被命名為內部和外部模組之前,但兩者我都可以從其他檔案導入類別。所以究竟真正的差別是什麼?
答案#1
正如 TS 手冊中所述,有兩種類型的模組:「內部」和「外部」。內部模組的程式碼是用 TypeScript 寫的,而「外部」則是用 Javascript 寫的。
為了與新的 ECMAScript 2015 的術語保持一致,他們決定將它們重新命名如下:
- 「內部模組」現在稱為「命名空間」。
- 「外部模組」現在簡單稱為「模組」,以與 ECMAScript 保持一致
所以:
- 你寫程式的方式不同
- 使用模塊時,類別不會暴露在全域範圍內,而使用命名空間時:
範例:
假設你有一個公共命名空間序列 NamespaceA.NamespaceB.NamespaceC,它公開了公共類別 ClassD。你可以這樣全局訪問這些內容:
window.NamespaceA
window.NamespaceA.NamespaceB
window.NamespaceA.NamespaceB.NamespaceC
window.NamespaceA.NamespaceB.NamespaceC.ClassD
不使用 window.NamespaceA=NamespaceA
如果你使用模組,你就必須使用上面的「魔法」
答案#2
命名空間是 TypeScript 組織程式碼的一種方式,當你不希望輸出的 Javascript 程式碼使用模組載入器時。
你可以在這裡的手冊中找到更多關於命名空間與模組的資訊。
