53

如标题所示:TypeScript 是否支持命名空间?如果是这样,我该如何使用它们?

4

5 回答 5

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;
        }
    }
}

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

于 2012-10-05T08:12:29.733 回答
28

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

来自Typescript 的新增功能

前:

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

后:

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

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

于 2015-07-24T18:01:51.123 回答
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/

于 2013-11-03T21:54:08.553 回答
7

没有“命名空间”关键字,但内部模块(使用“模块”关键字)和外部模块(使用“导出”关键字)提供了一种类似的方式来将您的代码划分为逻辑层次结构。

于 2012-10-05T00:35:52.250 回答
4

错误的...

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
于 2015-07-21T11:45:47.783 回答