0Pricing
TypeScript Academy · 课时

CI 中的类型检查:策略与工具

在持续集成流程中高效运行类型检查

CI 中的类型检查:策略与工具 是 CoddyKit 上的免费 TypeScript Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 TypeScript Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 TypeScript Academy 课程共包含 4 节课。

为什么要在 CI 中进行类型检查?

在 CI 中运行 TypeScript 类型检查,可以发现开发者在本地遗漏的类型错误,尤其是在大型团队中,因为一个软件包中的更改可能会破坏另一个软件包。

# Simple CI type check step
npx tsc --noEmit

--noEmit 标志

tsc --noEmit 会运行完整的类型检查器,但跳过 JavaScript 输出,非常适合在不生成文件的情况下进行 CI 类型检查。

# GitHub Actions step
- name: Type Check
  run: npx tsc --noEmit

CI 中的增量类型检查

将 --incremental 与 CI 缓存结合使用,以恢复 .tsbuildinfo 文件,这样只需重新检查已更改的文件。

# Cache .tsbuildinfo in CI (GitHub Actions)
- uses: actions/cache@v3
  with:
    path: .tsbuildinfo
    key: tsc-${{ hashFiles('src/**/*.ts') }}

CI 中的项目引用

在单体仓库中,tsc --build --noEmit 会遵循项目引用依赖关系,对所有软件包进行类型检查。

# Type-check all project references
npx tsc --build --noEmit

使用 Nx 仅检查受影响的内容

Nx 可以检测某个 PR 影响了哪些软件包,并且只对这些软件包进行类型检查,跳过未更改的软件包。

# Only type-check affected projects
npx nx affected --target=typecheck --base=origin/main

使用 Turborepo 进行类型检查

为每个软件包添加一个 typecheck 脚本,然后通过 Turborepo 使用缓存和并行化运行该脚本。

// package.json
{ "scripts": { "typecheck": "tsc --noEmit" } }

// turbo.json pipeline
{ "typecheck": { "dependsOn": ["^typecheck"], "outputs": [] } }

// Run:
npx turbo typecheck

并行执行类型检查

对于相互独立的软件包,请使用 concurrently 或 npm-run-all 等工具并行运行类型检查。

npx concurrently \
  "tsc -p packages/core/tsconfig.json --noEmit" \
  "tsc -p packages/ui/tsconfig.json --noEmit"

类型错误导致 CI 失败

请通过检查退出代码,确保 CI 遇到任何 TypeScript 错误时都会失败。存在错误时,tsc --noEmit 会以代码 1 退出。

# CI step — fails if tsc exits 1
- name: Type Check
  run: npx tsc --noEmit
  # No continue-on-error: true here

仅对拉取请求进行类型检查

使用 GitHub Actions 仅对 PR 中已更改的文件运行类型检查,从而减少大型仓库的 CI 时间。

# Use ts-affected or custom script to detect changed TS files
# Then run tsc only for affected tsconfig projects

将类型错误报告为 PR 评论

danger-js 等工具可以解析 tsc 输出,并将类型错误作为内联 PR 审查评论发布,以便更清晰地查看。

// dangerfile.ts
import { danger, fail } from "danger";
// Parse tsc --noEmit output and report errors inline

回顾:CI 类型检查

在 CI 中运行 tsc --noEmit 以确保正确性。使用 --incremental 加缓存来提升速度。在单体仓库中使用 tsc --build、Turborepo 或 Nx 的受影响内容分析,尽量减少每个 PR 所需的工作量。

快速检查

哪个 tsc 标志可以在不生成任何输出文件的情况下进行类型检查?

您学到了什么

CI 类型检查使用 tsc --noEmit 进行正确性检查,同时不生成文件。结合使用 --incremental、项目引用和缓存工具(Turborepo、Nx),即可在大型单体仓库中实现快速且可扩展的类型检查。

常见问题解答

「CI 中的类型检查:策略与工具」课时是免费的吗?

是的 — 「CI 中的类型检查:策略与工具」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 TypeScript Academy 课程的其余内容,请升级到 CoddyKit PRO。 TypeScript Academy 课程共包含 4 节课。

「CI 中的类型检查:策略与工具」这节课中我会学到什么?

在持续集成流程中高效运行类型检查 你通过在浏览器中直接运行的动手代码来练习 TypeScript Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 TypeScript Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 TypeScript Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「CI 中的类型检查:策略与工具」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 TypeScript Academy 课中编写并运行代码吗?

能。每节 TypeScript Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

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