📌  相关文章
📜  输入&#39;AxiosResponse<any> &#39; 提供不匹配的签名 (1)

📅  最后修改于: 2023-12-03 15:28:17.324000             🧑  作者: Mango

介绍:输入“AxiosResponse”提供不匹配的签名

当使用Axios库时,你可能会经常遇到以下警告:

输入“AxiosResponse < any >”提供不匹配的签名

在这篇文章中,我们将解释这个警告是什么意思,以及如何解决它。

AxiosResponse

AxiosResponse 是Axios 库中的一个泛型接口。这个接口描述了一个 HTTP 响应的结构。它的定义如下:

interface AxiosResponse<T = any> {
    data: T;
    status: number;
    statusText: string;
    headers: any;
    config: AxiosRequestConfig;
    request?: any;
}

AxiosResponse 接口有一个泛型参数 T,这个参数描述了响应主体的类型。如果你使用 Axios 发送一个 GET 请求并期望返回 JSON 数据,那么 T 的类型应该为 any 或者是与响应主体类型相同的类型。

不匹配的签名

警告 "输入“AxiosResponse < any >”提供不匹配的签名" 通常发生在你编写 Axios 请求的拦截器时。例如,你可能会使用以下代码去添加一个请求拦截器:

axios.interceptors.request.use((config: AxiosRequestConfig) => {
    config.headers.Authorization = getToken();
    return config;
}, error => Promise.reject(error));

然而,当你这样编写请求拦截器时,TypeScript 会向你发出上述警告,因为它需要一个 AxiosResponse 类型的参数,而不是 AxiosResponse < any>。

解决方法

为了解决这个问题,你需要告诉 TypeScript AxiosResponse 的类型参数 T,以便它知道响应主体的类型。例如,如果你的响应主体是一个对象,你可以使用以下代码:

axios.interceptors.response.use((response: AxiosResponse<{ data: string }>) => {
    const { data } = response.data;
    return data;
}, error => Promise.reject(error));

在这个代码片段中,我们告诉 TypeScript 响应主体的类型为 { data: string }。这意味着如果我们想要访问响应主体的内容,我们需要使用 response.data.data。

总之,如果你遇到了输入“AxiosResponse < any>”提供不匹配的签名的警告,请记得指定泛型类型参数T,以便 TypeScript 知道响应主体的类型。