二、命名空間
命名空間一個最明確的目的就是解決重名問題。
命名空間定義了標識符的可見范圍,一個標識符可在多個名字空間中定義,它在不同名字空間中的含義是互不相干的。這樣,在一個新的名字空間中可定義任何標識符,它們不會與任何已有的標識符發生沖突,因為已有的定義都處於其他名字空間中。
TypeScript 中命名空間使用 namespace 來定義,語法格式如下:
namespace SomeNameSpaceName { export interface ISomeInterfaceName { } export class SomeClassName { } }
以上定義了一個命名空間 SomeNameSpaceName,如果我們需要在外部可以調用 SomeNameSpaceName 中的類和接口,則需要在類和接口添加 export 關鍵字。
要在另外一個命名空間調用語法格式為:SomeNameSpaceName.SomeClassName;
如果一個命名空間在一個單獨的 TypeScript 文件中,則應使用三斜杠 /// 引用它,語法格式如下:
/// <reference path = "SomeFileName.ts" />
命名空間支持嵌套,即你可以將命名空間定義在另外一個命名空間里頭。
namespace namespace_name1 { export namespace namespace_name2 { export class class_name { } } }
成員的訪問使用點號 . 來實現。
三、模塊
TypeScript 模塊的設計理念是可以更換的組織代碼。模塊是在其自身的作用域里執行,並不是在全局作用域,這意味着定義在模塊里面的變量、函數和類等在模塊外部是不可見的,除非明確地使用 export 導出它們。類似地,我們必須通過 import 導入其他模塊導出的變量、函數、類等。
兩個模塊之間的關系是通過在文件級別上使用 import 和 export 建立的。模塊使用模塊加載器去導入其它的模塊。在運行時,模塊加載器的作用是在執行此模塊代碼前去查找並執行這個模塊的所有依賴。大家最熟知的JavaScript模塊加載器是服務於 Node.js 的 CommonJS 和服務於 Web 應用的 Require.js。此外還有有 SystemJs 和 Webpack。
模塊導出使用關鍵字 export 關鍵字,語法格式如下:
// 文件名 : SomeInterface.ts
export interface SomeInterface { // 代碼部分
} // 要在另外一個文件使用該模塊就需要使用 import 關鍵字來導入:
import someInterfaceRef = require("./SomeInterface");