日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網營銷解決方案
創(chuàng)新互聯(lián)TypeScript教程:TypeScript命名空間

關于術語的一點說明: 請務必注意一點,TypeScript 1.5里術語名已經發(fā)生了變化。 “內部模塊”現在稱做“命名空間”。 “外部模塊”現在則簡稱為“模塊”,這是為了與 ECMAScript 2015里的術語保持一致,(也就是說module X { 相當于現在推薦的寫法 namespace X {)。

創(chuàng)新互聯(lián)堅持“要么做到,要么別承諾”的工作理念,服務領域包括:成都網站建設、成都網站制作、企業(yè)官網、英文網站、手機端網站、網站推廣等服務,滿足客戶于互聯(lián)網時代的永昌網站設計、移動媒體設計的需求,幫助企業(yè)找到有效的互聯(lián)網解決方案。努力成為您成熟可靠的網絡建設合作伙伴!

介紹

這篇文章描述了如何在TypeScript里使用命名空間(之前叫做“內部模塊”)來組織你的代碼。

就像我們在術語說明里提到的那樣,“內部模塊”現在叫做“命名空間”。

另外,任何使用module關鍵字來聲明一個內部模塊的地方都應該使用namespace關鍵字來替換。

這就避免了讓新的使用者被相似的名稱所迷惑。

第一步

我們先來寫一段程序并將在整篇文章中都使用這個例子。 我們定義幾個簡單的字符串驗證器,假設你會使用它們來驗證表單里的用戶輸入或驗證外部數據。

所有的驗證器都放在一個文件里

interface StringValidator {
    isAcceptable(s: string): boolean;
}

let lettersRegexp = /^[A-Za-z]+$/;
let numberRegexp = /^[0-9]+$/;

class LettersOnlyValidator implements StringValidator {
    isAcceptable(s: string) {
        return lettersRegexp.test(s);
    }
}

class ZipCodeValidator implements StringValidator {
    isAcceptable(s: string) {
        return s.length === 5 && numberRegexp.test(s);
    }
}

// Some samples to try
let strings = ["Hello", "98052", "101"];
// Validators to use
let validators: { [s: string]: StringValidator; } = {};
validators["ZIP code"] = new ZipCodeValidator();
validators["Letters only"] = new LettersOnlyValidator();
// Show whether each string passed each validator
strings.forEach(s => {
    for (let name in validators) {
        console.log(""" + s + "" " + (validators[name].isAcceptable(s) ? " matches " : " does not match ") + name);
    }
});

命名空間

隨著更多驗證器的加入,我們需要一種手段來組織代碼,以便于在記錄它們類型的同時還不用擔心與其它對象產生命名沖突。 因此,我們把驗證器包裹到一個命名空間內,而不是把它們放在全局命名空間下。

下面的例子里,把所有與驗證器相關的類型都放到一個叫做Validation的命名空間里。 因為我們想讓這些接口和類在命名空間之外也是可訪問的,所以需要使用 export。 相反的,變量 lettersRegexpnumberRegexp是實現的細節(jié),不需要導出,因此它們在命名空間外是不能訪問的。 在文件末尾的測試代碼里,由于是在命名空間之外訪問,因此需要限定類型的名稱,比如 Validation.LettersOnlyValidator。

使用命名空間的驗證器

namespace Validation {
    export interface StringValidator {
        isAcceptable(s: string): boolean;
    }

    const lettersRegexp = /^[A-Za-z]+$/;
    const numberRegexp = /^[0-9]+$/;

    export class LettersOnlyValidator implements StringValidator {
        isAcceptable(s: string) {
            return lettersRegexp.test(s);
        }
    }

    export class ZipCodeValidator implements StringValidator {
        isAcceptable(s: string) {
            return s.length === 5 && numberRegexp.test(s);
        }
    }
}

// Some samples to try
let strings = ["Hello", "98052", "101"];
// Validators to use
let validators: { [s: string]: Validation.StringValidator; } = {};
validators["ZIP code"] = new Validation.ZipCodeValidator();
validators["Letters only"] = new Validation.LettersOnlyValidator();
// Show whether each string passed each validator
strings.forEach(s => {
    for (let name in validators) {
        console.log(`"${ s }" - ${ validators[name].isAcceptable(s) ? "matches" : "does not match" } ${ name }`);
    }
});

分離到多文件

當應用變得越來越大時,我們需要將代碼分離到不同的文件中以便于維護。

多文件中的命名空間

現在,我們把Validation命名空間分割成多個文件。 盡管是不同的文件,它們仍是同一個命名空間,并且在使用的時候就如同它們在一個文件中定義的一樣。 因為不同文件之間存在依賴關系,所以我們加入了引用標簽來告訴編譯器文件之間的關聯(lián)。 我們的測試代碼保持不變。

Validation.ts
namespace Validation {
    export interface StringValidator {
        isAcceptable(s: string): boolean;
    }
}
LettersOnlyValidator.ts
/// 
namespace Validation {
    const lettersRegexp = /^[A-Za-z]+$/;
    export class LettersOnlyValidator implements StringValidator {
        isAcceptable(s: string) {
            return lettersRegexp.test(s);
        }
    }
}
ZipCodeValidator.ts
/// 
namespace Validation {
    const numberRegexp = /^[0-9]+$/;
    export class ZipCodeValidator implements StringValidator {
        isAcceptable(s: string) {
            return s.length === 5 && numberRegexp.test(s);
        }
    }
}
Test.ts
/// 
/// 
/// 

// Some samples to try
let strings = ["Hello", "98052", "101"];
// Validators to use
let validators: { [s: string]: Validation.StringValidator; } = {};
validators["ZIP code"] = new Validation.ZipCodeValidator();
validators["Letters only"] = new Validation.LettersOnlyValidator();
// Show whether each string passed each validator
strings.forEach(s => {
    for (let name in validators) {
        console.log(""" + s + "" " + (validators[name].isAcceptable(s) ? " matches " : " does not match ") + name);
    }
});

當涉及到多文件時,我們必須確保所有編譯后的代碼都被加載了。 我們有兩種方式。

第一種方式,把所有的輸入文件編譯為一個輸出文件,需要使用--outFile標記:

tsc --outFile sample.js Test.ts

編譯器會根據源碼里的引用標簽自動地對輸出進行排序。你也可以單獨地指定每個文件。

tsc --outFile sample.js Validation.ts LettersOnlyValidator.ts ZipCodeValidator.ts Test.ts

第二種方式,我們可以編譯每一個文件(默認方式),那么每個源文件都會對應生成一個JavaScript文件。 然后,在頁面上通過