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

Turborepo monorepo中自定义类型与Jest类型无法同时识别问题

解决Turborepo Monorepo中TypeScript同时识别Jest类型与自定义类型的问题

项目结构

apps
  - my-app
    - src
      - some-test.spec.ts
    - tsconfig.json
    - types
      - index.d.ts
packages
  - tsconfig
    - base.json

现有配置

packages/tsconfig/base.json

{
  "compilerOptions": {
    "types": ["node", "jest"],
    "typeRoots": ["../../node_modules/@types"]
  },
  "exclude": [
    "build"
  ] 
}

apps/my-app/tsconfig.json

{
  "extends": "tsconfig/base.json",
  "include": [
    "src"
  ],
  "compilerOptions": {
    "typeRoots": [
      "./types"
    ]
  }
}

问题描述

当前存在类型识别矛盾:

  • 仅保留base配置中的types字段时,Jest类型可正常识别,但my-app/types下的自定义类型无法被读取
  • 仅保留typeRoots配置时,自定义类型正常生效,但Jest类型丢失

解决方案

核心原因是子项目的typeRoots覆盖了base配置的路径,导致TypeScript仅扫描自定义类型目录,忽略了全局node_modules/@types。需要同时指定两个类型目录,并确保types配置正确保留。

修改apps/my-app/tsconfig.json如下:

{
  "extends": "tsconfig/base.json",
  "include": [
    "src",
    "types" // 显式包含自定义类型目录
  ],
  "compilerOptions": {
    "typeRoots": [
      "./types",
      "../node_modules/@types" // 添加全局类型目录,路径需匹配项目实际node_modules位置
    ],
    "types": ["node", "jest"] // 明确指定需要加载的类型包
  }
}

补充说明

  1. 路径调整:../node_modules/@types是相对于my-app目录的路径,若你的monorepo中node_modules安装在根目录,可改为../../node_modules/@types,根据实际结构调整即可
  2. 自定义类型规范:确保types/index.d.ts中的类型定义符合TS规范,比如重写第三方库类型时,使用declare module "目标库名"包裹代码
  3. 简化配置:若不想重复声明types,只要typeRoots包含@types目录,且未将types设为空数组,TS会自动扫描@types下的类型包,但显式声明更稳妥

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 02:10:32