typescript - 8.命名空间

Posted tangge

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了typescript - 8.命名空间相关的知识,希望对你有一定的参考价值。

基础

略。
https://www.tslang.cn/docs/handbook/namespaces.html

多文件中的命名空间(一个文件分解为几个)

现在,我们把Validation命名空间分割成多个文件。 尽管是不同的文件,它们仍是同一个命名空间,并且在使用的时候就如同它们在一个文件中定义的一样。 因为不同文件之间存在依赖关系,所以我们加入了引用标签来告诉编译器文件之间的关联。 我们的测试代码保持不变。

Validation.ts

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

LettersOnlyValidator.ts

/// <reference path="Validation.ts" />
namespace Validation {
    const lettersRegexp = /^[A-Za-z]+$/;
    export class LettersOnlyValidator implements StringValidator {
        isAcceptable(s: string) {
            return lettersRegexp.test(s);
        }
    }
}

ZipCodeValidator.ts

/// <reference path="Validation.ts" />
namespace Validation {
    const numberRegexp = /^[0-9]+$/;
    export class ZipCodeValidator implements StringValidator {
        isAcceptable(s: string) {
            return s.length === 5 && numberRegexp.test(s);
        }
    }
}

Test.ts

/// <reference path="Validation.ts" />
/// <reference path="LettersOnlyValidator.ts" />
/// <reference path="ZipCodeValidator.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
for (let s of strings) {
    for (let name in validators) {
        console.log(`"${ s }" - ${ validators[name].isAcceptable(s) ? "matches" : "does not match" } ${ name }`);
    }
}

第一种方式,略。
第二种方式,我们可以编译每一个文件(默认方式),那么每个源文件都会对应生成一个javascript文件。 然后,在页面上通过 标签把所有生成的JavaScript文件按正确的顺序引进来,比如:

MyTestPage.html (excerpt)

    <script src="Validation.js" type="text/javascript" />
    <script src="LettersOnlyValidator.js" type="text/javascript" />
    <script src="ZipCodeValidator.js" type="text/javascript" />
    <script src="Test.js" type="text/javascript" />

如果不能使用///引用标签,可以使用export

重要:
可能3.4.5开始不能使用了。可以使这种方式

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

以上是关于typescript - 8.命名空间的主要内容,如果未能解决你的问题,请参考以下文章

LayaBox---TypeScript---声明合并

TypeScript入门八:TypeScript的命名空间

TypeScript躬行记——命名空间

TypeScript学习笔记 - 命名空间

TypeScript与JavaScript不同之处系列 ===; 命名空间, 三斜线指令

TypeScript 在命名空间下扩展 JQuery