網站搜尋

在 TypeScript 中,命名空間和模組之間有什麼區別


我已經使用 typescript 一段時間了,但我仍然不理解命名空間和模組之間的差異。

我知道在它們被命名為內部和外部模組之前,但兩者我都可以從其他檔案導入類別。所以究竟真正的差別是什麼?

答案#1

正如 TS 手冊中所述,有兩種類型的模組:「內部」和「外部」。內部模組的程式碼是用 TypeScript 寫的,而「外部」則是用 Javascript 寫的。

為了與新的 ECMAScript 2015 的術語保持一致,他們決定將它們重新命名如下:

  1. 「內部模組」現在稱為「命名空間」。
  2. 「外部模組」現在簡單稱為「模組」,以與 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 程式碼使用模組載入器時。

你可以在這裡的手冊中找到更多關於命名空間與模組的資訊。