TypeScript是否支持命名空间?
在标题中:TypeScript是否支持名称空间? 如果是这样,我该如何使用它们?
Typescript允许定义与ECMAScript 6中的内容紧密相关的模块 。下面的示例来自规范:
module outer { var local = 1; export var a = local; export module inner { export var x = 10; } }
正如你所看到的,模块有名字,可以嵌套。 如果您在模块名称中使用点,typescript会将其编译为嵌套模块,如下所示:
module ABC { export var x = 1; }
这相当于
module A { module B { module C { export var x = 1; } } }
同样重要的是,如果在一个打字程序中重复使用完全相同的模块名称,代码将属于同一个模块。 因此,您可以使用嵌套模块来实现层次结构命名空间。
从版本1.5开始,Typescript支持namespace
关键字。 命名空间相当于内部模块。
从Typescript中的新增function :
之前:
module Math { export function add(x, y) { ... } }
后:
namespace Math { export function add(x, y) { ... } }
为了定义一个内部模块,现在你可以使用module
和namespace
。
这是一个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'关键字)和外部模块(使用'export'关键字)提供了一种类似的方式将代码分成逻辑层次结构。
假…
module ABC { export var x = 1; }
等于
module A { export module B { export module C { export var x = 1; } } }
因为你可以写在模块A之外:
var y = ABCx;
但是:
module A { module B { module C { export var x = 1; } var y = Cx; // OK } //var y = BCx; // Invalid } //var y = ABCx; // Invalid