TypeScript 中的 emitDeclarationOnly

说明 emitDeclarationOnly 为什么只生成 .d.ts 而不生成 .js,以及它为什么常见于使用 Babel、SWC、esbuild 或 bundler 负责转译的项目。

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

[!info] related notes

TypeScript 中的 emitDeclarationOnly

一句话定义

emitDeclarationOnly 表示 TypeScript 只生成 .d.ts,不生成 .js

核心机制 / 工作原理

官方文档直接给出的定义是:

  • only emit .d.ts files
  • do not emit .js files

它最适合两类场景:

  • JavaScript 由 TypeScript 之外的 transpiler 生成
  • TypeScript 只负责给消费者产出类型声明

最小例子 / 最小场景

{
  "compilerOptions": {
    "declaration": true,
    "emitDeclarationOnly": true
  }
}

这常见于:

  • Babel / SWC / esbuild 负责 JS 转译
  • 库项目单独跑一遍 tsc 生成类型产物

边界与易混淆点

它不等于 noEmit

noEmit 是:

  • 什么都不生成

emitDeclarationOnly 是:

  • 只生成声明,不生成 JS

它通常和 declaration 一起出现

因为没有声明输出目标时,这个选项本身就失去意义。

它适合“转译和类型产物分工明确”的项目

如果 JS 输出本来就完全依赖 bundler 或其他 transpiler,这个选项会比直接让 tsc 产出完整 JS 更清晰。

参考信息

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