You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 03:36:04