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