TypeScript 中的 module

说明 tsconfig 里的 module 主要控制什么模块格式被输出,以及为什么它经常和 moduleResolution 一起出现但不等价。

#tech / dev #resource / typescript #type / concept #status / growing

[!info] related notes

TypeScript 中的 module

一句话定义

module 主要决定 TypeScript 输出的 JavaScript 会采用什么模块格式。

核心机制 / 工作原理

它回答的是:

这段 TypeScript 最终 emit 成什么模块形态。

例如:

  • commonjs 更偏 require / module.exports
  • esnext 更偏保留 import / export
  • nodenext 则要结合现代 Node 的双模块系统来决定每个文件如何输出

最小例子 / 最小场景

CommonJS

{
  "compilerOptions": {
    "module": "commonjs"
  }
}

ES Modules

{
  "compilerOptions": {
    "module": "esnext"
  }
}

边界与易混淆点

module 不负责“怎么找模块”

它主要管输出格式,不等于模块解析算法本身。

module 也不负责“这个文件算不算模块文件”

这层更接近:

module 又会反过来影响解析条件

尤其在 nodenext / node16 这类模式里,最终输出会是 import 还是 require,会进一步影响 package exports 的条件选择。

参考信息

创建于 2026/5/15 更新于 2026/5/27