使用typescript封装axios支持接口返回值类型提示和检查
import axios, { AxiosRequestConfig, AxiosResponse } from 'axios';
// 定义响应数据的接口
interface ApiResponse<T> {
code: number;
message: string;
data: T;
}
// 封装axios,增加泛型支持返回值类型提示
const http = <T>(config: AxiosRequestConfig): Promise<T> => {
return new Promise((resolve, reject) => {
const instance = axios.create({
baseURL: 'http://your-api-url',
// 其他配置...
});
instance(config)
.then((response: AxiosResponse<ApiResponse<T>>) => {
const apiResponse: ApiResponse<T> = response.data;
if (apiResponse.code === 200) {
resolve(apiResponse.data);
} else {
reject(new Error(apiResponse.message));
}
})
.catch(error => {
reject(error);
});
});
};
// 使用封装后的http函数
http<UserData>( {
method: 'GET',
url: '/user'
})
.then(userData => {
// 此处userData类型会根据定义的泛型自动推断为UserData
console.log(userData);
})
.catch(error => {
console.error(error);
});
这个示例中,我们定义了一个ApiResponse
接口来表示API的响应格式,并在http
函数中使用泛型来指定期望的返回数据类型。这样,当我们调用http
函数并指定了泛型类型时,返回的数据类型就会是我们预期的UserData
类型,从而实现了类型检查和提示。
评论已关闭