TypeScript 中的 noEmit
说明 noEmit 为什么常用于前端 app、Vite 项目和仅做类型检查的流程,以及它对 outDir 等选项的影响。
#tech / dev
#resource / typescript
#type / concept
#status / growing
[!info] related notes
- 所属 MOC: TypeScript MOC
- 配置入口: tsconfig 使用详解
- 并列概念: TypeScript 中的 outDir, tsc, TypeScript 中的 nodenext 与 bundler
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 往往不合适。
参考信息
- TSConfig
noEmit: https://www.typescriptlang.org/tsconfig/#noEmit