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"] // 明确指定需要加载的类型包 } }
补充说明
- 路径调整:
../node_modules/@types是相对于my-app目录的路径,若你的monorepo中node_modules安装在根目录,可改为../../node_modules/@types,根据实际结构调整即可 - 自定义类型规范:确保
types/index.d.ts中的类型定义符合TS规范,比如重写第三方库类型时,使用declare module "目标库名"包裹代码 - 简化配置:若不想重复声明
types,只要typeRoots包含@types目录,且未将types设为空数组,TS会自动扫描@types下的类型包,但显式声明更稳妥
内容的提问来源于stack exchange,提问作者tdranv
相关产品推荐
相关产品推荐

