打字稿模块“无”和“CommonJS”之间的区别

ary*_*ing 6 typescript

似乎将 tsc 与compilerOptions.moduleset to一起使用NoneCommonJS正在生成相同的转译代码。这两者有何不同?为什么有两种方法可以生成(显然)相同的转译代码?

Sha*_*tin 5

随着module集来None,我们不能用进口,出口,或扩充模块(在除方式@artem音符下面的评论。)

这是消息的来源

"Cannot use imports, exports, or module augmentations when '--module' is 'none'.": {
    "category": "Error",
    "code": 1148
},
Run Code Online (Sandbox Code Playgroud)

随着module集来CommonJS,如果我们选择不使用进口,出口,或模块扩充,那么我们的输出可能因为它当我们设置看起来一样moduleNone

  • 它实际上是“在顶层不能有任何导入或导出”。命名空间内的导入和导出很好,因为它们在运行时不会从 `.ts` 文件中导出任何内容,并且只要文件仍然“不是模块”,`module=None` 就可以正常工作。这里有详细解释:/sf/answers/2706621501/ (2认同)
  • 使用`module=none`,您只能使用导入分配来创建[别名](https://www.typescriptlang.org/docs/handbook/namespaces.html#aliases),您不能从模块导入。示例:文件`a.ts`:`namespace A { import b = Bb; 控制台日志(b); ` file `b.ts`: `namespace B { export var b = 'b' }` 使用 `tsc --module none --outFile o.js b.ts a.ts` 编译。这部分语言早于 ES 模块,现在主要具有历史意义。此外,在执行此操作时,您应该使用 `reference` 指令来确保运行时正确的初始化顺序。 (2认同)