ipi*_*nak 9 angularjs typescript systemjs
我正在尝试解决与ES6模块相关的一些问题.如何将名称空间与angular和typescript一起使用.
假设以下代码表示角度指令.有谁知道module关键字的含义,以及如何在其他文件中访问MyClass.
// file1.ts
module NSpace.Space {
export class MyClass {
constructor() { ... }
...
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我尝试使用和重新导出访问另一个文件
// file2.ts
import {MyClass} from 'file1';
export {MyClass}
Run Code Online (Sandbox Code Playgroud)
我收到此错误:错误TS2306:文件'file.ts'不是模块
我的问题是:
module关键字是什么?module Space.Space1.Space2 ...从我到目前为止阅读和经历的情况来看,似乎ES6模块是基于文件结构定义的,这就是我得到这个错误的原因.
我没有写过这段代码,这就是我要问的原因.另外,提一下我正在使用System.JS进行导入可能会很有用.
Fen*_*ton 10
moduleTypeScript中的关键字引起了一些混乱,因此它将被重命名namespace.
但是,您可以按文件/文件系统组织代码,而不是使用命名空间(这意味着实际文件位置将与感知的命名空间匹配.这就是"外部模块"(TypeScript)的工作方式 - 以及ECMAScript 2015模块的工作方式.
因此,通过快速调整,您将拥有:
// file1.ts
export class MyClass {
constructor() { ... }
...
}
Run Code Online (Sandbox Code Playgroud)
然后这将工作:
import {MyClass} from 'file1';
Run Code Online (Sandbox Code Playgroud)
如果您编译目标ES6,您会注意到这行代码不需要翻译,它与模块导入的标准相匹配.如果您的目标是ES5或更低,TypeScript将为您转换此语句(您可以使用该--module标志选择转换).
我倾向于使用UMD编译选项,这意味着输出将在Web浏览器(使用RequireJS)或Node上运行.系统JS目前实际上获得了很大的吸引力,所以你可能也想考虑这一点.最终,浏览器将本身支持模块加载.
| 归档时间: |
|
| 查看次数: |
1818 次 |
| 最近记录: |