You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对含多项目的TypeScript monorepo进行全文件类型检查

pnpm TypeScript Monorepo命令行类型检查方案问题

背景

我正在维护一个使用pnpm搭建的TypeScript monorepo。TypeScript文件分布在以下位置:

  • 项目源代码文件(packages/*/src/**/*.ts);
  • 仓库根目录下的配置文件(*.ts);
  • 项目文件夹根目录下的配置文件(packages/*/*.ts);
  • Cypress测试用例及配置文件(cypress/**/*.ts)。

当我在VS Code中打开这些文件时,希望TypeScript语言服务能对文件进行类型检查,以便编辑器能标注出问题。

为实现这一点,我在仓库根目录创建了tsconfig.json,配置了对monorepo中所有TS文件的严格类型检查(排除node_modules),内容如下:

{
  "compilerOptions": {
     "strict": true,
     "noEmit": true,
     ... // 更多配置项
  }
}

为让VS Code能正确检查项目文件夹中的源代码文件,尤其是确保每个项目仅加载相关的@types包,我在每个项目文件夹中放置了继承根目录tsconfig.json的tsconfig.json文件:

{
  "extends": "../../tsconfig.json"
}

cypress文件夹中的tsconfig.json有一些额外配置,但核心逻辑一致。

目前,monorepo已配置好VS Code中的类型检查,打开任意.ts文件时,语言服务都能正确报告类型问题。

需求

现在我需要能从命令行对整个monorepo进行类型检查,需满足以下条件:

  1. 所有开头列出的TS文件都要被类型检查;
  2. 仅对开头列出的TS文件进行类型检查;
  3. 保持项目间的类型检查隔离(即检查foo项目的源代码时,仅包含packages/foo/package.json中列出的包及packages/foo/node_modules下安装的@types包和类型定义);
  4. 同一文件不会被重复类型检查(节省时间,避免重复报错)。

已尝试的方法(均至少不满足一项需求)

方法1:tsc --project tsconfig.json

  • 通过:根目录tsconfig包含仓库中除node_modules外的所有.ts文件。
  • 未通过:输出目录(dist、build、out等)中的.ts文件也会被检查。
  • 未通过:所有@types包和类型定义都会被加载,破坏项目间隔离,导致全局类型冲突(如Cypress与Jest),使类型检查不可靠。
  • 通过:tsc仅运行一次,无重复检查问题。

方法2:tsc --project tsconfig.check.json

其中tsconfig.check.json内容如下:

{
  "extends": "./tsconfig.json",
  "include": ["*.ts", "packages/*/*.ts", "packages/*/src/**/*.ts", ...]
}
  • 通过
  • 通过:虽繁琐且易遗漏同步,但能生效
  • 未通过:仍无法保持项目间隔离
  • 通过

方法3:tsc -p tsconfig.check.json && tsc -p packages/foo/tsconfig.json && ...

根目录tsconfig.check.json仅包含["*.ts"],项目的tsconfig.json修改为包含["*.ts", "src/**/*.ts"]。

每个项目的tsc命令可放入NPM脚本,利用pnpm的递归运行脚本能力。

  • 通过
  • 通过:未包含输出目录
  • 通过:tsconfig.check.json不包含项目文件,各项目的tsconfig.json互斥(不包含其他项目的文件)
  • 未通过:若项目foo导入项目bar的文件,且tsc同时运行于两个项目,则导入的文件会被检查两次;若仅运行foo的tsc,bar中未被foo导入的文件(如测试文件)不会被检查。

TypeScript项目引用

目前tsc --build --noEmit尚未被支持。


问题

如何才能让该monorepo满足上述所有四个条件?


内容的提问来源于stack exchange,提问作者Axel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 19:02:27