打字稿中的模块关键字是什么意思?

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' 不是模块

我的问题是:

根据我目前的阅读和经验,似乎 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 目前实际上获得了很大的关注,所以你可能也想考虑一下。最终,浏览器将直接支持模块加载。