ES6 模块:TypeScript 内部模块和包的可持续性

ES6 Modules: Sustainability of TypeScript internal modules & Bundles

classTypeScript 中的全名

TypeScript 1.X 允许开发人员将内部模块用作命名空间。

module MyProject.MySubProject {
    export class A {
    }
    export function f() {
        var a1 = new A(); // valid
        var a2 = new MySubProject.A(); // valid too
        var a3 = new MyProject.MySubProject.A(); // valid too, again
    }
}
MyProject.MySubProject.f();
var a4 = new MyProject.MySubProject.A(); // ... and valid

当转换为 ES5 时,此代码创建一个对象 MyProject,其中包含一个对象 MySubProject,该对象 MySubProject 包含两个函数 Af

在模块内部,class可以设计成相对名称(AMySubProject.A)或全名(MyProject.MySubProject.A)。从模块外部,导出的 class 与全名一起使用。

但是nested modules no longer exists in ES6. And TypeScript is going to align to the ES6 modules.

classes (MyModule1.MyModule2.MyClass) 的全名是否与 ES6 兼容?

如果我们想以旧方式使用命名空间,我们可以在闭包或对象中声明 ES6 class 吗?

捆绑包和 ES6 模块

下面是一段类似 ES6 方式的代码:

//------ MyProject/MySubProject.js ------
export class A {
}
export function f() {
    var a1 = new A(); // valid
}

//------ main.js ------
import { A, f } from 'MyProject/MySubProject';
f();
var a2 = new A();

两个JavaScript文件拼接成一个缩小后的文件后,如何操作import

TypeScript 仅作为 new sytanx based on TypeScript external modules 与 ES6 模块保持一致。这是基于 GitHub 上正在进行的工作。当前 internal 模块与新语法不冲突,因此将继续按原样工作。