TypeScript 4.6.4升级至4.7.4后axios/index.d.ts报类型错误
问题根因
这个错误是三方依赖类型定义冲突+TypeScript版本检查规则收紧共同导致的:
- 升级到的
@types/node@18.0.0给全局Error接口扩展了可选属性status?: number - 当前使用的
axios@0.27.2自带的类型定义中,继承Error的AxiosError类重写了status属性,定义为status?: string,和基类的number类型不兼容 - 升级到的TypeScript 4.7收紧了接口/类继承时的属性类型兼容性校验,会直接抛出这类类型不匹配错误
- ts-node、ts-node-dev运行时默认不做全量的声明文件类型检查,只会转译代码,所以启动服务时不会触发这个错误,只有执行
npx tsc做完整类型校验时才会报错。
解决方案
按推荐优先级从高到低排列:
- 方案1:在tsconfig中开启
skipLibCheck(最快、无侵入)
打开项目根目录的tsconfig.json,在compilerOptions节点下添加"skipLibCheck": true配置即可。该配置会跳过对node_modules下所有第三方.d.ts类型声明文件的兼容性校验,仅检查业务代码的类型正确性,不影响生产构建的类型安全。
修正后的tsconfig.json参考(顺便去掉了原配置中多余的尾逗号,避免JSON解析报错):
保存后重新执行{ "compilerOptions": { "sourceMap": false, "outDir": "dist", "rootDir": "src", "strict": true, "lib": ["ES2021"], "esModuleInterop": true, "target": "ES2021", "moduleResolution": "node", "skipLibCheck": true } }npx tsc即可消除报错。 - 方案2:升级axios到修复版本
该类型定义问题在axios后续版本已经官方修复,执行命令npm install axios@latest升级到最新稳定版,新版本中AxiosError.status的类型已经调整为number,可直接适配@types/node 18和TypeScript 4.7的校验规则。 - 方案3:回退依赖版本(临时兜底)
如果暂时不能改配置也不能升级axios,可以把TypeScript回退到4.6.4、@types/node回退到17.x版本,旧版本组合不会触发这个类型校验冲突,但长期来看不推荐使用,会错过后续的类型优化和新特性支持。
内容的提问来源于stack exchange,提问作者otobot1
相关产品推荐
相关产品推荐

