import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse, CreateAxiosDefaults, InternalAxiosRequestConfig } from 'axios' export interface ResponseData { success: boolean msg: string data: any } type interceptorsFn = (arg: T) => T class AxiosPro { private instance: AxiosInstance constructor(config: CreateAxiosDefaults) { this.instance = axios.create(config) } get(config: AxiosRequestConfig): Promise { return this.instance({ ...config, method: 'GET' }) } post(config: AxiosRequestConfig): Promise { return this.instance({ ...config, method: 'POST' }) } put(config: AxiosRequestConfig): Promise { return this.instance({ ...config, method: 'PUT' }) } requestInterceptors(fn: interceptorsFn>) { this.instance.interceptors.request.use(req => { return fn(req) }) } responseInterceptors(fn: (res: AxiosResponse) => ResponseData) { this.instance.interceptors.response.use(res => { return fn(res) as unknown as AxiosResponse }) } } export default AxiosPro