繼續上篇文章[TypeScript基礎入門之命名空間(二)]spa
另外一種能夠簡化名稱空間使用方法的方法是使用import q = x.y.z爲經常使用對象建立較短的名稱。
不要與用於加載模塊的import x = require("name")語法相混淆,此語法只是爲指定的符號建立別名。
您能夠將這些類型的導入(一般稱爲別名)用於任何類型的標識符,包括從模塊導入建立的對象。code
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的更改不會反映在原始變量中。對象
要描述不是用TypeScript編寫的庫的形狀,咱們須要聲明庫公開的API。
由於大多數JavaScript庫只公開一些頂級對象,因此命名空間是表示它們的好方法。blog
咱們稱之爲未定義實現「環境」的聲明。
一般,這些是在.d.ts文件中定義的。
若是您熟悉C/C++,能夠將它們視爲.h文件。
咱們來看幾個例子。ip
流行的庫D3在名爲d3的全局對象中定義其功能。
由於此庫是經過<script>標記(而不是模塊加載器)加載的,因此它的聲明使用命名空間來定義其形狀。
要讓TypeScript編譯器看到這個形狀,咱們使用環境命名空間聲明。
例如,咱們能夠開始編寫以下:D3.d.ts(簡化摘錄)element
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;