TypeScript 中的 noEmit

说明 noEmit 为什么常用于前端 app、Vite 项目和仅做类型检查的流程,以及它对 outDir 等选项的影响。

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

[!info] related notes

TypeScript 中的 noEmit

一句话定义

noEmit 表示 TypeScript 只做类型检查,不生成任何输出文件。

核心机制 / 工作原理

当配置:

{
  "compilerOptions": {
    "noEmit": true
  }
}

时,tsc 仍然会:

  • 解析 program
  • 做类型检查
  • 报告错误

但不会生成:

  • .js
  • .d.ts
  • sourcemap

最小例子 / 最小场景

前端 app

在 Vite、Webpack、Next.js 等项目里,TypeScript 常只负责检查,真正的转译和打包交给 bundler。

这类项目常见配置:

{
  "compilerOptions": {
    "module": "ESNext",
    "moduleResolution": "bundler",
    "noEmit": true
  }
}

边界与易混淆点

noEmit 不等于“不需要 tsconfig”

即使不输出产物,TypeScript 仍然需要:

  • 了解模块解析方式
  • 了解 JSX 模式
  • 了解严格模式与类型边界

noEmit 项目里 outDir 往往没有实际意义

因为没有输出,outDir 不会真正落盘生效。

library 通常不适合只开 noEmit

如果你要发布库、生成 .d.ts、或者直接靠 tsc 构建产物,noEmit 往往不合适。

参考信息

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