TypeScript 命名空間
命名空間同樣是為了避免變量命名沖突,TypeScript 官方將命名空間視為“內部模塊”,上節介紹的模塊被視為“外部模塊”。
如果聲明相同名稱的命名空間,TypeScript 編譯器會將其合并為一個聲明,具體的合并規則會在下節介紹。
1. 慕課解釋
使用 namespace
關鍵字來聲明命名空間。
TypeScript 的命名空間可以將代碼包裹起來,只對外暴露這個命名空間對象,通過 export
關鍵字將命名空間內的變量掛載到命名空間對象上。
2. 命名空間的本質
命名空間本質上就是一個對象,將其內部的變量組織到這個對象的屬性上:
namespace Calculate {
const fn = (x: number, y: number) => x * y
export const add = (x: number, y:number) => x + y
}
來看其編譯后的結果:
"use strict";
var Calculate;
(function (Calculate) {
var fn = function (x, y) { return x * y; };
Calculate.add = function (x, y) { return x + y; };
})(Calculate || (Calculate = {}));
那么,我們就可以訪問 Calculate 對象上的 add 屬性了:
Calculate.add(2, 3)
命名空間主要是為解決全局作用域內重名問題,而這一問題隨著模塊化編程的使用,已經得到了解決。
3. 小結
通過本節的介紹,知道命名空間的使用方法即可,在 TypeScript 中一般不推薦使用。