TypeScript基礎入門之名稱空間(三)
繼續上篇文章[ofollow,noindex">TypeScript基礎入門之名稱空間(二) ]
別名
另一種可以簡化名稱空間使用方法的方法是使用import q = x.y.z為常用物件建立較短的名稱。
不要與用於載入模組的import x = require("name")語法相混淆,此語法只是為指定的符號建立別名。
您可以將這些型別的匯入(通常稱為別名)用於任何型別的識別符號,包括從模組匯入建立的物件。
namespace Shapes { export namespace Polygons { export class Triangle { } export class Square { } } } import polygons = Shapes.Polygons; let sq = new polygons.Square(); // 類似於 'new Shapes.Polygons.Square()'
請注意,我們不使用require關鍵字;
相反,我們直接從我們匯入的符號的限定名稱中分配。
這類似於使用var,但也適用於匯入符號的型別和名稱空間含義。
重要的是,對於值,import是與原始符號的不同引用,因此對別名var的更改不會反映在原始變數中。
使用其他JavaScript庫
要描述不是用TypeScript編寫的庫的形狀,我們需要宣告庫公開的API。
因為大多數JavaScript庫只公開一些頂級物件,所以名稱空間是表示它們的好方法。
我們稱之為未定義實現“環境”的宣告。
通常,這些是在.d.ts檔案中定義的。
如果您熟悉C/C++,可以將它們視為.h檔案。
我們來看幾個例子。
環境名稱空間
流行的庫D3在名為d3的全域性物件中定義其功能。
因為此庫是通過<script>標記(而不是模組載入器)載入的,所以它的宣告使用名稱空間來定義其形狀。
要讓TypeScript編譯器看到這個形狀,我們使用環境名稱空間宣告。
例如,我們可以開始編寫如下:D3.d.ts(簡化摘錄)
declare namespace D3 { export interface Selectors { select: { (selector: string): Selection; (element: EventTarget): Selection; }; } export interface Event { x: number; y: number; } export interface Base extends Selectors { event: Event; } } declare var d3: D3.Base;