如何为TypeScript中axios返回值的解构变量设置类型以规避ESLint报错
TypeScript 中避免axios POST请求触发
@typescript-eslint/no-unsafe-assignment 规则的方案 核心原因
你之前直接将res断言为不带泛型的AxiosResponse类型不生效,是因为默认AxiosResponse的data字段类型为any,而@typescript-eslint/no-unsafe-assignment规则本身就是禁止将any类型的值赋值给变量,因此断言没有作用。
解决步骤
1. 先定义后端返回的响应体结构类型
根据你实际的返回字段定义TS接口,不要保留any类型:
// 按你实际的业务字段替换定义 interface YourPostResponse { someObject: Record<string, any>; // 替换为someObject的实际类型,也可以定义嵌套接口 someString: string; // 其他返回字段按需补充 }
2. 给axios.post方法传入泛型参数
axios的请求方法原生支持泛型,传入后res.data会自动匹配你定义的类型,无需额外断言,也不会触发ESLint规则:
axios // 传入你定义的响应体类型作为泛型参数 .post<YourPostResponse>(url, payload) .then((res) => { // 此时res.data自动为YourPostResponse类型,无any报错 const { someObject, someString } = res.data; // 后续业务逻辑 })
如果你需要用到完整的AxiosResponse对象(比如要获取status、headers等字段),可以传入第二个泛型参数:
import type { AxiosResponse } from 'axios'; axios .post<YourPostResponse, AxiosResponse<YourPostResponse>>(url, payload) .then((res) => { const { someObject, someString } = res.data; // 可以正常拿到AxiosResponse的其他属性 console.log(res.status, res.headers); })
补充说明
- 上述类型校验仅在编译阶段生效,如果你需要保证运行时数据结构和定义一致,可以额外增加运行时数据校验逻辑。
- 如果是全局封装的axios实例,也可以在创建实例时指定默认的响应类型,减少每个接口重复传泛型的操作。
内容的提问来源于stack exchange,提问作者bonum_cete
相关产品推荐
相关产品推荐

