Axios带请求体的POST请求如何指定与请求体不同的响应类型
问题原因
该报错是Axios v0.22.0及更早版本的官方类型定义bug,此版本下axios.post的泛型参数逻辑存在错误,错误绑定了请求体和响应的类型,导致你传入的请求体被强制要求和指定的响应类型AuthResponse结构一致,同时返回的axiosResp.data也被错误推断为请求体的类型,你的写法本身没有问题。
解决方案
- 推荐方案:将Axios升级到v0.23.0及以上版本,官方已在该版本修复了这个类型bug,升级后你的原有代码可以直接正常运行,
axios.post<AuthResponse>的泛型参数会正确作用于返回的响应数据,不会再对请求体做错误的类型校验。 - 临时兼容方案(若暂时无法升级Axios版本):可以手动传入三个泛型参数,分别指定响应类型、Axios响应包装类型、请求体类型,示例代码如下:
// 先定义请求体对应的TS类型 interface AuthRequest { grant_type: string refresh_token: string } axios .post<AuthResponse, AxiosResponse<AuthResponse>, AuthRequest>( secrets.authURL, { grant_type: this.grantType, refresh_token: this.authPayload, }, { headers: { Authorization: this.getAuthHeader(), "Content-Type": this.contentType, }, } ) .then((axiosResp) => { // 此时axiosResp.data会被正确推断为AuthResponse类型 const response = axiosResp.data; });
内容的提问来源于stack exchange,提问作者Toguard
相关产品推荐
相关产品推荐

