分析缓慢的 TypeScript 编译过程
使用 --extendedDiagnostics 和 --generateTrace 查找瓶颈
分析缓慢的 TypeScript 编译过程 是 CoddyKit 上的免费 TypeScript Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 TypeScript Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 TypeScript Academy 课程共包含 4 节课。
TypeScript 为什么会变慢
复杂的条件类型、大型联合类型分发以及深度递归的映射类型,可能导致 TypeScript 的类型检查器在大型项目中显著变慢。
// Expensive: distributive conditional on large union
type Slow = LargeUnion extends infer T ? T extends string ? T : never : never;--extendedDiagnostics 标志
请运行 tsc --extendedDiagnostics,查看编译时间的细分:解析、绑定、类型检查和输出阶段。
tsc --extendedDiagnostics 2>&1 | head -40
# Output:
# Files: 212
# Lines: 48320
# Check time: 8.23s ← focus here--generateTrace 标志
tsc --generateTrace ./trace 会生成兼容 Chrome DevTools 的跟踪文件。您可以在 Performance 标签页中加载该文件,查看哪些类型的处理开销较大。
tsc --generateTrace ./trace-output
# Open trace-output/trace.json in Chrome DevTools > Performance分析跟踪信息
在跟踪信息中,请查找表示耗时类型实例化的长条。类型名称和源代码位置会告诉您需要优化的内容。
# Common culprits in traces:
# - Recursive mapped types with large inputs
# - Distributive conditionals over 50+ member unions
# - Deep infer chains on complex generics--listFiles 标志
tsc --listFiles 会显示编译中包含的每个文件。意外包含的大型 node_modules 文件夹是常见的性能问题根源。
tsc --listFiles 2>&1 | grep node_modules | wc -l
# If this is large, check your include/exclude settings减少文件包含范围
请在 tsconfig 中使用 include 和 exclude,限制 TypeScript 处理的文件。
{
"include": ["src/**/*"],
"exclude": ["node_modules", "dist", "**/*.test.ts"]
}使用 skipLibCheck 快速见效
skipLibCheck: true 会跳过所有 .d.ts 声明文件的类型检查,这可以显著加快包含大量依赖的项目的编译速度。
{
"compilerOptions": {
"skipLibCheck": true
}
}隔离耗时类型
请将耗时的类型计算提取为命名的中间类型,以便 TypeScript 缓存它们,而不是在每个使用位置重新计算。
// Slow: recomputed at each usage
type Result = ComplexUnion extends string ? ComplexUnion : never;
// Fast: cached
type FilteredUnion = ComplexUnion extends string ? ComplexUnion : never;
type Result = FilteredUnion;使用 transpileOnly 进行检查
在开发期间,请使用 ts-jest 或 esbuild 配合 transpileOnly: true,跳过类型检查以加快迭代。请在持续集成中单独运行完整的类型检查。
// jest.config.js with ts-jest
{
transform: {
"^.+\.tsx?$": ["ts-jest", { diagnostics: false }]
}
}编辑器性能
VS Code 中 TypeScript 语言服务器的速度变慢,通常都可以追溯到相同的高开销类型。请检查 TypeScript: Restart TS Server,以及语言服务器生成的 TS 跟踪信息。
// VS Code settings.json to enable detailed TS server log:
// "typescript.tsserver.log": "verbose"回顾:分析编译性能
使用 --extendedDiagnostics 获取高级计时信息,使用 --generateTrace 进行逐类型分析,并减少文件包含、深层条件判断和大型联合类型分布,以加快编译速度。
快速检查
哪个标志会生成兼容 Chrome DevTools 的跟踪文件?
您学到了什么
使用 --extendedDiagnostics 和 --generateTrace 分析 TypeScript 编译性能。通过限制文件包含、使用 skipLibCheck、缓存中间类型,以及避免深度递归或可分配的类型操作来缩短编译时间。
常见问题解答
「分析缓慢的 TypeScript 编译过程」课时是免费的吗?
是的 — 「分析缓慢的 TypeScript 编译过程」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 TypeScript Academy 课程的其余内容,请升级到 CoddyKit PRO。 TypeScript Academy 课程共包含 4 节课。
「分析缓慢的 TypeScript 编译过程」这节课中我会学到什么?
使用 --extendedDiagnostics 和 --generateTrace 查找瓶颈 你通过在浏览器中直接运行的动手代码来练习 TypeScript Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 TypeScript Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 TypeScript Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「分析缓慢的 TypeScript 编译过程」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 TypeScript Academy 课中编写并运行代码吗?
能。每节 TypeScript Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 分析缓慢的 TypeScript 编译过程
- 避免高开销的类型操作
- skipLibCheck 与隔离声明
- CI 中的类型检查:策略与工具