一般的axios的返回值类型
export interface AxiosResponse<T = any, D = any> {
data: T;
status: number;
statusText: string;
headers: AxiosResponseHeaders;
config: AxiosRequestConfig<D>;
request?: any;
}
但是我在拦截器中做了处理,只返回接口的data
axios.interceptors.response.use(
(response) => {
return response.data;
},
(error) => {
return Promise.reject(error);
}
);
然后实际使用的时候,提示我类型不对
promise.then((res: ResponseData)=>{})
提示我
类型“(res: ResponseData) => void”的参数不能赋给类型“(value: AxiosResponse<any, any>) => void | PromiseLike<void>”的参数。
参数“res”和“value” 的类型不兼容
应该怎么解决?
换成axios.request<any, ResponseData>() 方式看看,可以通过传入泛型,修改返回类型AxiosResponse
从axios的ts类型定义文件可以看出来,
如果直接用axios(config).then()的方式,axios()执行后返回AxiosPromise
而AxiosPromise的定义看
并没有提供泛型,来修改返回值类型AxiosResponse,所以这种方式走不通,
如果用axios.request(config)方式,则可以利用
axios.request<any, ResponseData>()泛型,修改返回值类型AxiosResponse<T>