import axios from 'axios' import type { AxiosInstance } from 'axios' import type { AxiosConfig, DataType, IrequestConfig } from './types' class MyRequest { private instance: AxiosInstance constructor(config: AxiosConfig) { this.instance = axios.create(config) this.instance.interceptors.request.use((config) => { return config }) this.instance.interceptors.response.use((res) => { return res }) this.instance.interceptors.request.use( config.interceptors?.requestSucess, config.interceptors?.requestError ) this.instance.interceptors.response.use( config.interceptors?.responseSucess, config.interceptors?.responseError ) } request( url: string, method: 'get' | 'post' | 'delete' | 'put', data?: D, config?: IrequestConfig ) { return new Promise>((resolve, reject) => { if (config?.interceptors?.requestSucess) { config = config.interceptors?.requestSucess(config) } this.instance .request>({ url: url, data, method: method, ...config }) .then((res) => { if (config?.interceptors?.responseSucess) { res = config.interceptors?.responseSucess(res) } resolve(res.data) }) .catch((err) => { reject(err) }) }) } get(url: string, config?: IrequestConfig) { return this.request(url, 'get', null,config) } post(url: string, data: D, config?: IrequestConfig) { return this.request(url, 'post', data, config) } put(url: string, data: D, config?: IrequestConfig) { return this.request(url, 'put', data, config) } delete(url: string, config?: IrequestConfig) { return this.request(url, 'delete', null,config) } } new MyRequest({ baseURL: '', timeout: 3000 }) export default MyRequest