【发布时间】:2012-09-26 02:51:52
【问题描述】:
如标题所示:TypeScript 是否支持命名空间?如果是这样,我该如何使用它们?
【问题讨论】:
标签: namespaces typescript
如标题所示:TypeScript 是否支持命名空间?如果是这样,我该如何使用它们?
【问题讨论】:
标签: namespaces typescript
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;
}
}
}
同样重要的是,如果您在一个打字稿程序中重复使用完全相同的模块名称,那么代码将属于同一个模块。因此,您可以使用嵌套模块来实现分层命名空间。
【讨论】:
namespace 也不会将其与 module 源代码混合使用。
从 1.5 版开始,Typescript 支持 namespace 关键字。命名空间相当于内部模块。
之前:
module Math { export function add(x, y) { ... } }之后:
namespace Math { export function add(x, y) { ... } }
为了定义一个内部模块,现在您可以同时使用module 和namespace。
【讨论】:
module 和 namespace 都转换为相同的 JavaScript 代码。
namespace 也不会将其与 module 源代码混合使用。
这是一个 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/
【讨论】:
没有“命名空间”关键字,但内部模块(使用“模块”关键字)和外部模块(使用“导出”关键字)提供了一种将代码划分为逻辑层次结构的类似方法。
【讨论】:
namespace 也不会将其与 module 源代码混合使用。
错误...
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
【讨论】: