TypeScript基礎入門之命名空間(三)

轉載 TypeScript基礎入門之命名空間(三)ui

繼續上篇文章[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的更改不會反映在原始變量中。對象

使用其餘JavaScript庫

要描述不是用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;
相關文章
相關標籤/搜索