TypeScript是否支持命名空间?

时间:2012-10-05 00:33:32

标签: namespaces typescript

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

5 个答案:

答案 0 :(得分:55)

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

module outer {
    var local = 1;
    export var a = local;
    export module inner {
        export var x = 10;
    }
}

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

module A.B.C {
    export var x = 1;
}

这等于

module A {
    module B {
        module C {
            export var x = 1;
        }
    }
}

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

答案 1 :(得分:28)

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

来自What's new in Typescript

  

在:

     
module Math {
    export function add(x, y) { ... }
}
     

后:

     
namespace Math {
    export function add(x, y) { ... }
}

为了定义内部模块,现在您可以同时使用modulenamespace

答案 2 :(得分: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();
        }
    }
}

您可以在此处查看更多内容:http://www.codebelt.com/typescript/javascript-namespacing-with-typescript-internal-modules/

答案 3 :(得分:7)

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

答案 4 :(得分:3)

...假

module A.B.C {
    export var x = 1;
}

等于

module A {
    export module B {
        export module C {
            export var x = 1;
        }
    }
}

因为你可以在模块A:

之外写
var y = A.B.C.x;

但是:

module A {
    module B {
        module C {
            export var x = 1;
        }
        var y = C.x; // OK
    }
    //var y = B.C.x; // Invalid
}
//var y = A.B.C.x;   // Invalid