tsx文件中封装axios的返回值类型,使用ts开发的时候,要给每一个数据类型都限制数据类型。
发送axios的请求的代码片段
代码片段
export const reqHospitalListInfo = ({
page = 1,
limit = 3,
hosname = "",
hoscode = "",
}: typeReqHosInfoParams) => {
//requestHos是封装axios实例创建的对象,作用是发送axios请求
return requestHos.get<any,typeHostListInfo>(`/admin/hosp/hospitalSet/${page}/${limit}`, {
params: {
hosname,
hoscode,
},
});
};
axios发送请求的返回值要根据后端返回来的数据,进行返回值的限制
在tsx文件中要给函数的参数和函数返回值配置限制类型,当返回值可以推断出来的时候可以省略(一般可以推断出来的都是简单的数据类型,复杂的数据类型必须要限制返回值的类型)
- 后端返回回来的数据,可能是一个复杂的数据对象,
tip:限制返回值的类型,要根据数据的使用情况时候,将数据限制类型进行拆分,单写出去,由内而外,最后进行组合成一个完整的限制返回值的数据类型
- 给axios请求函数的返回值限制类型的策略
要给函数的返回值限制类型,必须要分析一下,axios.get方法的返回值的类型。 打开.d.ts文件,里面有axios内置的类型(.d.ts文件在打包的时候是不会进行编译成js文件的),分析打开的.d.ts文件,找到get方法的内置类型
//axios的内置.d.ts文件
get<T = any, R = AxiosResponse<T>, D = any>(url: string, config?: AxiosRequestConfig<D>): Promise<R>;
分析参数:get的参数类型,接受三个泛型,T,R,D,给的有函数的初始值,当没有传参的时候,会使用它的默认初始值,get函数返回的是一个promise对象,它也接受一个泛型R,用来规范自己的内部的值的类型,限制返回值的类型,那么有两种策略,一种是限制get函数的第一个参数的类型,从而限制R的类型,
// AxiosResponse<T>的内置数据类型
export interface AxiosResponse<T = any, D = any> {
data: T;
status: number;
statusText: string;
headers: RawAxiosResponseHeaders | AxiosResponseHeaders;
config: InternalAxiosRequestConfig<D>;
request?: any;
}
由于 data:T的限制 使用第一个参数进行限制必须对后端返回的整个promise对象进行类型限制,因为实际在使用axios的时候,会设置拦截器,只拿有用的信息,这里取了返回数据中的data中的data,而第一个参数所限制的类型是整个后端返回回来的数据,因此,如果使用T来限制返回类型是有点麻烦的
拦截器的相关的配置
if (response.data.code === 200) {
// 说明功能成功,返回成功的数据
return response.data.data; // 我们最终希望得到的数据
}
因此采用第二种策略,直接给第二个参数设置泛型,直接给返回的data.data数据类型进行限制,更加方便的完成axios请求函数返回值的限制。