打字稿中的模块关键字是什么意思?
What does the module keyword mean in typescript?
我想弄清楚一些与 ES6 模块相关的事情。如何将命名空间与 angular 和打字稿一起使用。
假设以下代码表示一个 angular 指令。有谁知道 module
关键字的含义以及如何访问其他文件中的 MyClass。
// file1.ts
module NSpace.Space {
export class MyClass {
constructor() { ... }
...
}
}
我曾尝试使用并重新导出访问另一个文件,但是
// file2.ts
import {MyClass} from 'file1';
export {MyClass}
我收到此错误:错误 TS2306:文件 'file.ts' 不是模块
我的问题是:
- 为什么我会得到这个?
- 这个
module
关键字是什么?
- 我们是只根据目录结构创建ES6模块还是可以
我们实际上使用这种表示法吗?
module Space.Space1.Space2 ...
根据我目前的阅读和经验,似乎 ES6 模块是基于文件结构定义的,这就是我收到此错误的原因。
我没有写过这段代码,这就是我问的原因。此外,提及我正在使用 System.JS 进行导入可能会有用。
TypeScript 中的 module
关键字引起了一些混乱,因此将重命名为 namespace
。
虽然不使用命名空间,但您可以按文件/文件系统组织代码(这意味着实际文件位置将与感知的命名空间相匹配。这就是 "exteral modules" (TypeScript) 的工作方式 - 以及ECMAScript 2015 模块如何工作。
因此,通过快速调整,您将拥有:
// file1.ts
export class MyClass {
constructor() { ... }
...
}
然后这将起作用:
import {MyClass} from 'file1';
如果您针对 ES6 进行编译,您会注意到这行代码不需要翻译,它符合模块导入的标准。如果您以 ES5 或更低版本为目标,TypeScript 将为您转换此语句(您可以使用 --module
标志选择转换。
我倾向于使用 UMD 编译选项,这意味着输出将在 Web 浏览器(使用 RequireJS)或 Node.js 上运行。 System JS 目前实际上获得了很大的关注,所以你可能也想考虑一下。最终,浏览器将直接支持模块加载。
我想弄清楚一些与 ES6 模块相关的事情。如何将命名空间与 angular 和打字稿一起使用。
假设以下代码表示一个 angular 指令。有谁知道 module
关键字的含义以及如何访问其他文件中的 MyClass。
// file1.ts
module NSpace.Space {
export class MyClass {
constructor() { ... }
...
}
}
我曾尝试使用并重新导出访问另一个文件,但是
// file2.ts
import {MyClass} from 'file1';
export {MyClass}
我收到此错误:错误 TS2306:文件 'file.ts' 不是模块
我的问题是:
- 为什么我会得到这个?
- 这个
module
关键字是什么? - 我们是只根据目录结构创建ES6模块还是可以
我们实际上使用这种表示法吗?
module Space.Space1.Space2 ...
根据我目前的阅读和经验,似乎 ES6 模块是基于文件结构定义的,这就是我收到此错误的原因。
我没有写过这段代码,这就是我问的原因。此外,提及我正在使用 System.JS 进行导入可能会有用。
TypeScript 中的 module
关键字引起了一些混乱,因此将重命名为 namespace
。
虽然不使用命名空间,但您可以按文件/文件系统组织代码(这意味着实际文件位置将与感知的命名空间相匹配。这就是 "exteral modules" (TypeScript) 的工作方式 - 以及ECMAScript 2015 模块如何工作。
因此,通过快速调整,您将拥有:
// file1.ts
export class MyClass {
constructor() { ... }
...
}
然后这将起作用:
import {MyClass} from 'file1';
如果您针对 ES6 进行编译,您会注意到这行代码不需要翻译,它符合模块导入的标准。如果您以 ES5 或更低版本为目标,TypeScript 将为您转换此语句(您可以使用 --module
标志选择转换。
我倾向于使用 UMD 编译选项,这意味着输出将在 Web 浏览器(使用 RequireJS)或 Node.js 上运行。 System JS 目前实际上获得了很大的关注,所以你可能也想考虑一下。最终,浏览器将直接支持模块加载。