TypeScript是否支持命名空间?

fle*_*sod 52 namespaces typescript

与标题中一样:TypeScript是否支持名称空间?如果是这样,我该如何使用它们?

Val*_*tin 55

Typescript允许定义与ECMAScript 6中的内容密切相关的模块.以下示例取自规范:

module outer {
    var local = 1;
    export var a = local;
    export module inner {
        export var x = 10;
    }
}
Run Code Online (Sandbox Code Playgroud)

如您所见,模块具有名称并且可以嵌套.如果在模块名称中使用点,typescript会将其编译为嵌套模块,如下所示:

module A.B.C {
    export var x = 1;
}
Run Code Online (Sandbox Code Playgroud)

这等于

module A {
    module B {
        module C {
            export var x = 1;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

同样重要的是,如果在一个打字稿程序中重复使用完全相同的模块名称,则代码将属于同一模块.因此,您可以使用嵌套模块来实现层次结构命名空间.


Nik*_*pić 28

从1.5版开始,Typescript支持namespace关键字.命名空间等同于内部模块.

来自Typescript中的新功能:

之前:

module Math {
    export function add(x, y) { ... }
}
Run Code Online (Sandbox Code Playgroud)

后:

namespace Math {
    export function add(x, y) { ... }
}
Run Code Online (Sandbox Code Playgroud)

要定义内部模块,现在可以使用modulenamespace.


cod*_*elt 9

这是一个TypeScript命名空间示例:

///<reference path='AnotherNamespace/ClassOne.ts'/>
///<reference path='AnotherNamespace/ClassTwo.ts'/>

module MyNamespace
{
    import ClassOne = AnotherNamespace.ClassOne;
    import ClassTwo = AnotherNamespace.ClassTwo;

    export class Main
    {
        private _classOne:ClassOne;
        private _classTwo:ClassTwo;

        constructor()
        {
            this._classOne = new ClassOne();
            this._classTwo = new ClassTwo();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以在这里查看更多信息:http://www.codebelt.com/typescript/javascript-namespacing-with-typescript-internal-modules/


Rya*_*ugh 7

没有'namespace'关键字,但内部模块(使用'module'关键字)和外部模块(使用'export'关键字)提供了一种类似的方法来将代码划分为逻辑层次结构.

  • 因为typescript 1.5有这样一个关键字 (5认同)