0Pricing
TypeScript Academy · 课时

分析缓慢的 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. 分析缓慢的 TypeScript 编译过程
  2. 避免高开销的类型操作
  3. skipLibCheck 与隔离声明
  4. CI 中的类型检查:策略与工具
← 返回 TypeScript Academy