简介
这是TypeScript
实战的第三篇文章。前面两篇笔者分别介绍了在Vuex
和Pinia
中怎么使用TypeScript
以及Vuex
和Pinia
的区别。今天我们再用TypeScript
封装一遍Axios
。希望能进一步巩固TypeScript
的基础知识。
Axios几个常用类型
在使用TypeScript
封装Axios
之前我们先来看看Axios
几个重要的类型。
AxiosRequestConfig
AxiosRequestConfig
是我们使用axios
发送请求传递参数的类型。当然它也是我们请求拦截器里面的参数类型。
axios(config: AxiosRequestConfig)
可以看到,这个config
里面的参数还是挺多的。我们常用的有url、method、params、data、headers、baseURL、timeout
。
export interface AxiosRequestConfig {url?: string;method?: Method;baseURL?: string;transformRequest?: AxiosTransformer | AxiosTransformer[];transformResponse?: AxiosTransformer | AxiosTransformer[];headers?: any;params?: any;paramsSerializer?: (params: any) => string;data?: any;timeout?: number;timeoutErrorMessage?: string;withCredentials?: boolean;adapter?: AxiosAdapter;auth?: AxiosBasicCredentials;responseType?: ResponseType;xsrfCookieName?: string;xsrfHeaderName?: string;onUploadProgress?: (progressEvent: any) => void;onDownloadProgress?: (progressEvent: any) => void;maxContentLength?: number;validateStatus?: ((status: number) => boolean) | null;maxBodyLength?: number;maxRedirects?: number;socketPath?: string | null;httpAgent?: any;httpsAgent?: any;proxy?: AxiosProxyConfig | false;cancelToken?: CancelToken;decompress?: boolean;transitional?: TransitionalOptions
}
AxiosInstance
AxiosInstance
是我们使用axios
实例对象类型。
我们使用axios.create(config?: AxiosRequestConfig)
创建出来的对象都是AxiosInstance
类型
export interface AxiosInstance {(config: AxiosRequestConfig): AxiosPromise;(url: string, config?: AxiosRequestConfig): AxiosPromise;defaults: AxiosRequestConfig;interceptors: {request: AxiosInterceptorManager<AxiosRequestConfig>;response: AxiosInterceptorManager<AxiosResponse>;};getUri(config?: AxiosRequestConfig): string;request<T = any, R = AxiosResponse<T>> (config: AxiosRequestConfig): Promise<R>;get<T = any, R = AxiosResponse<T>>(url: string, config?: AxiosRequestConfig): Promise<R>;delete<T = any, R = AxiosResponse<T>>(u