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