import { AxiosInstance, AxiosError, AxiosResponse, Method, HeadersDefaults, AxiosHeaderValue, AxiosInterceptorOptions, InternalAxiosRequestConfig, AxiosRequestConfig, AxiosRequestHeaders } from 'axios';
export type HttpRequestMethods = Extract<Method, "get" | "post" | "put" | "delete" | "patch" | "option" | "head">;
export interface HttpError extends AxiosError {
    isCancelRequest?: boolean;
}
export interface HttpResponse extends AxiosResponse {
    config: InternalHttpRequestConfig;
}
export interface InternalHttpRequestConfig extends HttpRequestConfig {
    headers: AxiosRequestHeaders;
}
export interface HttpRequestConfig extends AxiosRequestConfig {
    successMsg?: string;
    beforeRequestCallback?: (request: HttpRequestConfig) => void;
    beforeResponseCallback?: (response: HttpResponse) => void;
}
export interface HttpDefaults extends Omit<HttpRequestConfig, 'headers'> {
    headers: HeadersDefaults;
}
type HttpRequestInterceptorUse<T> = (onFulfilled?: ((value: T) => T | Promise<T>) | null, onRejected?: ((error: any) => any) | null, options?: AxiosInterceptorOptions) => number;
type HttpResponseInterceptorUse<T> = (onFulfilled?: ((value: T) => T | Promise<T>) | null, onRejected?: ((error: any) => any) | null) => number;
export interface HttpInterceptorManager<V> {
    use: V extends HttpResponse ? HttpResponseInterceptorUse<V> : HttpRequestInterceptorUse<V>;
    eject(id: number): void;
    clear(): void;
}
export declare class Http {
    constructor(config?: HttpRequestConfig);
    /** 保存当前`Axios`实例对象 */
    defaults: Omit<HttpDefaults, "headers"> & {
        headers: HeadersDefaults & {
            [p: string]: AxiosHeaderValue;
        };
    };
    instance: AxiosInstance;
    interceptors: {
        request: HttpInterceptorManager<InternalAxiosRequestConfig>;
        response: HttpInterceptorManager<HttpResponse>;
    };
    /** 通用请求工具函数 */
    request<T>(method: HttpRequestMethods, url: string, param?: HttpRequestConfig): Promise<T>;
    /** 单独抽离的`post`工具函数 */
    post<T>(url: string, params?: HttpRequestConfig): Promise<T>;
    /** 单独抽离的`get`工具函数 */
    get<T>(url: string, params?: HttpRequestConfig): Promise<T>;
    put<T>(url: string, params?: HttpRequestConfig): Promise<T>;
    delete<T>(url: string, params?: HttpRequestConfig): Promise<T>;
}
export declare const http: Http;
export {};
