NestJS使用@nestjs/axios时AxiosRequestConfig类型不兼容如何解决
问题根源
你的项目中存在两份不同版本的axios类型定义,导致类型不兼容:
- 一份是
@nestjs/axios@0.0.3内置依赖的axios@0.23.0 - 另一份是项目根目录
node_modules下你单独安装的其他版本axios
两个版本对TransitionalOptions的字段必填规则定义不同,所以你手动声明的AxiosRequestConfig和HttpService要求的入参类型匹配失败。
解决方案
方案1:复用@nestjs/axios内置的axios类型(最快修复)
不要从项目根目录的axios包导入AxiosRequestConfig,选择以下任意一种方式调整即可:
- 省略config的显式类型声明,让TS自动推导类型:
private _loginAndChangeToken(): Observable<LoginResponse> { // 去掉AxiosRequestConfig类型声明,TS会自动匹配正确的类型 const config = { auth: { username: MAILAPI_USERNAME, password: MAILAPI_PASSWORD, }, }; return this.httpService.get<LoginResponse>(MAILAPI_LOGIN_PATH, config).pipe( map((response) => response.data), tap(({ token }) => { this.token = token; }), ); }
- 统一从@nestjs/axios依赖的axios导入类型:
import type { AxiosRequestConfig } from '@nestjs/axios/node_modules/axios';
方案2:对齐axios版本(从根源解决冲突)
把项目中单独安装的axios版本降级到和@nestjs/axios依赖的版本一致,也就是0.23.0:
npm install axios@0.23.0 # 用yarn的话执行:yarn add axios@0.23.0
安装完成后删除node_modules和package-lock.json/yarn.lock文件,重新安装依赖即可确保项目中只有一份axios实例。
方案3:临时跳过类型检查(应急用,不推荐)
如果只是临时调试不想改依赖,可以给config加类型断言绕过检查:
return this.httpService.get<LoginResponse>(MAILAPI_LOGIN_PATH, config as any).pipe( // 后续逻辑不变 )
内容的提问来源于stack exchange,提问作者EyeQ Tech
相关产品推荐
相关产品推荐

