我正在尝试解决与ES6模块相关的一些问题。如何将名称空间与angular和typescript一起使用。
假设以下代码表示角度指令。有谁知道module
关键字的含义以及如何在其他文件中访问MyClass。
// file1.ts
module NSpace.Space {
export class MyClass {
constructor() { ... }
...
}
}
我尝试使用和重新导出访问其他文件,但是
// file2.ts
import {MyClass} from 'file1';
export {MyClass}
我收到此错误: 错误TS2306:文件'file.ts'不是模块
我的问题是:
module
关键字是什么?module Space.Space1.Space2 ...
从我读过的内容到目前为止看来ES6模块似乎是基于文件结构定义的,这就是我收到此错误的原因。
我没有写过这段代码,这就是我要问的原因。另外,提一下我正在使用System.JS进行导入可能很有用。
答案 0 :(得分:8)
TypeScript中的module
关键字引起了一些混淆,因此它将重命名为namespace
。
因此,通过快速调整,您将拥有:
// file1.ts
export class MyClass {
constructor() { ... }
...
}
然后这将有效:
import {MyClass} from 'file1';
如果您编译目标ES6,您会注意到这行代码不需要翻译,它与模块导入的标准相匹配。如果您的目标是ES5或更低,TypeScript将为您转换此语句(您可以使用--module
标志选择转换。
我倾向于使用UMD编译选项,这意味着输出可以在Web浏览器(使用RequireJS)或Node上运行。系统JS目前实际上获得了很大的吸引力,所以你可能也想考虑这一点。最终,浏览器将本身支持模块加载。