与标题中一样:TypeScript是否支持名称空间?如果是这样,我该如何使用它们?
答案 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
个关键字。命名空间等同于内部模块。
在:
module Math { export function add(x, y) { ... } }
后:
namespace Math { export function add(x, y) { ... } }
为了定义内部模块,现在您可以同时使用module
和namespace
。
答案 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