如何阻止tsc对node_modules文件夹进行类型检查?
解决tsc强制检查node_modules中mongoose类型文件的问题(skipLibCheck无效)
问题现象
执行tsc --project tsconfig.json时,tsc会对node_modules/mongoose/types/query.d.ts进行类型检查,抛出语法错误,且配置中的skipLibCheck: true未生效。
错误日志
> my-project@0.0.0 build:ts > tsc --project tsconfig.json node_modules/mongoose/types/query.d.ts:619:34 - error TS1144: '{' or ';' expected. 619 toConstructor(): typeof Query<ResultType, DocType, THelpers, RawDocType>;; ~ node_modules/mongoose/types/query.d.ts:619:45 - error TS1005: '>' expected. 619 toConstructor(): typeof Query<ResultType, DocType, THelpers, RawDocType>;; ~ node_modules/mongoose/types/query.d.ts:619:77 - error TS1109: Expression expected. 619 toConstructor(): typeof Query<ResultType, DocType, THelpers, RawDocType>;; ~ node_modules/mongoose/types/query.d.ts:622:19 - error TS1109: Expression expected. 622 update(filter?: FilterQuery<DocType>, update?: UpdateQuery<DocType> | UpdateWithAggregationPipeline, options?: QueryOptions<DocType> | null, callback?: Callback<UpdateWriteOpResult>): QueryWithHelpers<UpdateWriteOpResult, DocType, THelpers, RawDocType>;;
当前tsconfig.json配置
{ "compilerOptions": { "lib": [ "es2020" ], "module": "commonjs", "experimentalDecorators": true, "moduleResolution": "node", "sourceMap": true, "strict": false, "target": "es2020", "noImplicitAny": false, "suppressImplicitAnyIndexErrors": true, "typeRoots": [ "node_modules/@types" ], "outDir": "dist", "esModuleInterop": true, "resolveJsonModule": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true }, "include": [ "src/**/*.ts" ], "paths": { "*": [ "node_modules/*", "src/types/*" ] }, "ts-node": { "files": true } }
版本信息
- tsc 4.5.5(来自typescript@4.5.5)
- node v16.10.0
解决办法
1. 检查TypeScript与Mongoose版本兼容性
你使用的TS版本4.5.5相对老旧,而Mongoose的类型定义可能使用了更高版本TS支持的语法(比如复杂泛型写法)。可以:
- 查看当前mongoose版本,去其官方文档确认兼容的TS版本范围
- 若版本不匹配,降级mongoose到支持TS4.5.x的版本,或者升级TS到4.7及以上版本(推荐后者,新版本修复了大量类型系统问题)
2. 确保skipLibCheck配置生效
- 尝试在命令行直接指定参数:
tsc --project tsconfig.json --skipLibCheck,排除配置文件加载异常的可能 - 检查上级目录是否存在其他
tsconfig.json,避免配置被意外覆盖
3. 调整paths配置避免意外包含node_modules
你的paths配置中"*": ["node_modules/*", "src/types/*"]可能导致TS将node_modules文件视为源码的一部分,触发类型检查。可以:
- 移除
paths中的node_modules/*,仅保留src/types/* - 显式添加
exclude配置:
虽然TS默认排除node_modules,但"exclude": [ "node_modules", "dist" ]paths配置可能干扰这一逻辑,显式声明更稳妥
4. 清理依赖缓存
- 删除
node_modules和package-lock.json/yarn.lock - 重新执行
npm install或yarn install,排除依赖安装损坏的可能
内容的提问来源于stack exchange,提问作者Andre M
相关产品推荐
相关产品推荐

