TS 配置 axios 时遇到TS2339错误的解决办法

假设 我们使用的接口返回以下参数:

{
    "error":0,
    "msg":"",
    "data":{}
}

如果我们在使用axios的过程中使用了响应拦截器,自定义了返回参数,则会报:TS2339: Property 'error' does not exist on type 'AxiosResponse '. 错误。同时 axios.create也会返回相同的错误(临时解决办法是axios.default.create,但在使用rollup打包时会报错)。

import axios, { Axios } from "axios";

const request: Axios = axios.create({
  baseURL: "https://localhost:8080",
  timeout: 30000
});

// 添加响应拦截器
request.interceptors.response.use(
  function (response: { status: number; data: any }) {
    // 对响应数据做点什么
    return Object.assign({ status: response.status }, response.data);
  },
  function (error: any) {
    // 对响应错误做点什么
    return Promise.reject(error);
  }
);

const { error, status, data, msg } = await request.get("/test");
// TS2339: Property 'error' does not exist on type 'AxiosResponse '.
console.info(error, status, data, msg);

解决办法就是追加声明:

import axios, { Axios, AxiosResponse, AxiosRequestConfig } from "axios";

declare module "axios" {
  interface AxiosResponse<T = any> {
    error: number;
    msg: string;
    // 这里追加你的参数
  }
  export function create(config?: AxiosRequestConfig): AxiosInstance;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容