/**
 * 异常模块
 * @date 2022-03
 * @author 何华东
 */
import { AxiosError } from "axios";
/**
 * 参数异常类
 *
 * ```ts
 * import { ParamError } from "refs/nslib";
 *
 * throw new ParamError('id is null.','id');
 * ```
 * @param paramName 参数名
 */
export declare class ParamError extends Error {
    paramName?: string;
    constructor(message: string, paramName?: string);
}
/**
 * 参数无效异常类
 *
 * ```ts
 * import { ParamInvalidError } from "refs/nslib";
 *
 * throw new ParamInvalidError('id');
 * ```
 * @param paramName 参数名
 */
export declare class ParamInvalidError extends ParamError {
    constructor(paramName?: string);
}
/**
 * 参数为空异常类
 * ```ts
 * import { ParamEmptyError } from "refs/nslib";
 *
 * throw new ParamEmptyError('id');
 * ```
 * @param paramName 参数名
 */
export declare class ParamEmptyError extends ParamError {
    constructor(paramName?: string);
}
export declare class FriendlyError extends Error {
    constructor(message: string);
}
/**
 * API异常类
 *
 * 由于`Axios`的`AxiosError`异常属性比较多, 且在PROD环境下使用多线程记录日志, 使用`postMessage`传输日志信息(`HTML结构化克隆算法`),
 * 只能传输`AxiosError`的`Message`信息, 所以使用`ApiError`代替`AxiosError`
 *
 * ```ts
 * import { throwApiErrorFromAxiosError } from "refs/nslib";
 *
 * const axiosInstance = axios.create({
 *   baseURL: 'xxx'
 * });
 *
 * axiosInstance.interceptors.request.use(config => {
 *   return config;
 * }, error => {
 *   throwApiErrorFromAxiosError(error);
 * });
 *
 * axiosInstance.interceptors.response.use(response => {
 *   return response;
 * }, error => {
 *   throwApiErrorFromAxiosError(error);
 * });
 * ```
 */
export declare class ApiError {
    /**
     * 接口分类，例如：统一接口，仅为记录日志
     */
    apiCategory?: string;
    /**
     * 接口描述, 仅为记录日志
     */
    apiDesc?: string;
    /**
     * 错误信息
     */
    message?: string;
    /**
     * 接口地址
     */
    url: string;
    /**
     * 请求头
     */
    headers?: any;
    /**
     * 请求数据
     */
    data?: any;
    /**
     * 明文，请求数据可能是密文
     */
    plaintext?: any;
    /**
     * axiosError.code, 例如：`ECONNABORTED` 请求超时
     */
    code?: string;
    /**
     * http状态码 `200`、`500`、`404`
     */
    status?: any;
    /**
     * 接口返回值
     */
    response?: any;
    toString(): string;
}
export declare function generateApiErrorFromAxiosError(axiosError: AxiosError, apiCategory?: string): ApiError;
/**
 * 从AxiosError抛出ApiError异常
 *
 * @param apiCategory 接口分类
 */
export declare function throwApiErrorFromAxiosError(error: any, apiCategory?: string): void;
