用途:为 TypeScript 项目建立独立于构建的类型检查门禁。Vite、esbuild、SWC 等打包/转译工具只剥离类型注解而不做类型检查,因此代码存在类型错误时构建仍可能通过;该技能补齐单独的 tsc --noEmit 检查,在本地和 CI 中运行,并配合真正严格的 tsconfig,以及 monorepo 中让跨包类型可解析的项目引用。
主要能力:编写或收紧严格 tsconfig(strict 只是下限,建议至少加上 noUncheckedIndexedAccess,可使用 extends: "@tsconfig/strictest" 作为严格基线);配置 Vite 等打包器应用的 moduleResolution: "bundler" 及配套 flag;设置项目引用(composite、references、tsc -b)以让应用包消费库或生成包的类型;在 CI 中加入类型检查步骤,使打包器会忽略的类型错误导致构建失败。
使用方式:新增独立于构建的 typecheck 脚本,如 "typecheck": "tsc -b --noEmit",Vite 场景可用 "build": "tsc -b && vite build";项目引用场景必须用 tsc -b,而非裸 tsc;CI 中单独运行该脚本(如 GitHub Actions 配合 pnpm)。
适用场景:首次为项目搭建类型检查、加固 tsconfig、配置打包器模块解析、monorepo 跨包类型引用、为 CI 添加类型门禁。
限制:不负责 lint/格式化(属 linter)、不负责实际打包产物(属打包器)、不讲解高级类型理论、不负责 monorepo 任务运行器的流水线与缓存。注意:不要以为构建通过类型就没问题;脚手架不保证默认严格;exactOptionalPropertyTypes、verbatimModuleSyntax 等需按需谨慎开启;skipLibCheck: true 会跳过 .d.ts 检查,可能掩盖真实错误。