/**
 * Ajax 工具类
*/
export default abstract class {
    static ignoreEmptyString(): void;
    /**
     * 发送 HTTP GET(同步) 请求，支持返回结果
     * 按 RESTFUL 规范说明 ： GET 通常用来获取特定不变的数据
     *
     * @param url 请求接口链接地址
     * @param cache 是否缓存，默认缓存
     * @returns JSON对象
     *
     * 代码示例：
     * ```javascript
     * // 通过 回调函数 使用
     * import {Ajax} from 'utils'
     * Ajax.GETASYNC('/api-url');
     * Ajax.GETASYNC('/api-url',false);
     *
     * ```
    */
    static GETASYNC(url: string, cache?: boolean): any;
    /**
     * 发送 HTTP GET 请求，支持 **回调函数** 与 **异步队列** 方式进行请求
     * 按 RESTFUL 规范说明 ： GET 通常用来获取特定不变的数据
     *
     * @param url 请求接口链接地址
     * @param callback 回调函数，如果没有设置，则返回一个 Promise对象
     * @returns 如果没有指定回调函数，则返回一个 Promise对象
     *
     * 额外说明 ： GET 方法支持浏览器前端缓存，可以预先将需要缓存的地址通过 Ajax.SESSION() 方法传入，对于已经缓存的地址不会发出实际的网络请求
     *
     * 代码示例：
     * ```javascript
     * // 通过 回调函数 使用
     * import {Ajax} from 'utils'
     * Ajax.GET('/api-url',json=>console.log(json));
     *
     * // 通过 异步队列 使用
     * const all = yield Ajax.GET('/api-url');
     * console.log(all);
     * ```
    */
    static GET(url: string, callback?: Function): Promise<any>;
    /**
     * 发送 HTTP POST 请求，支持 **回调函数** 与 **异步队列** 方式进行请求
     * 按 RESTFUL 规范说明 ： POST 通常用来做复杂的条件查询
     *
     * @param url 请求接口链接地址
     * @param param 请求参数，调用时会参数的 `json格式` 传给接口
     * @param callback 回调函数，如果没有设置，则返回一个 Promise对象
     * @returns 如果没有指定回调函数，则返回一个 Promise对象
     *
     * 代码示例：
     * ```javascript
     * // 通过 回调函数 使用
     * import {Ajax} from 'utils'
     * Ajax.POST('/api-url',{status:0,find:'name'},json=>console.log(json));
     *
     * // 通过 异步队列 使用
     * const resp = yield Ajax.POST('/api-url',{status:0,find:'name'});
     * console.log(resp);
     * ```
    */
    static POST(url: any, param: any, callback?: Function): Promise<any>;
    /**
     * 同步POST方法，仅供特殊场景使用
     * 一般场景避免使用，以免卡死
     */
    static POSTASYNC(url: string, param: any): any;
    /**
     * 发送 HTTP PUT 请求，支持 **回调函数** 与 **异步队列** 方式进行请求
     * 按 RESTFUL 规范说明 ： PUT 通常用来做对象的新增
     *
     * @param url 请求接口链接地址
     * @param param 请求参数，调用时会参数的 `json格式` 传给接口
     * @param callback 回调函数，如果没有设置，则返回一个 Promise对象
     * @returns 如果没有指定回调函数，则返回一个 Promise对象
     *
     * 代码示例：
     * ```javascript
     * // 通过 回调函数 使用
     * import {Ajax} from 'utils'
     * Ajax.PUT('/api-url',{status:0,find:'name'},json=>console.log(json));
     *
     * // 通过 异步队列 使用
     * const resp = yield Ajax.PUT('/api-url',{status:0,find:'name'});
     * console.log(resp);
     * ```
    */
    static PUT(url: any, param: any, callback?: Function): Promise<any>;
    /**
     * 发送 HTTP PATCH 请求，支持 **回调函数** 与 **异步队列** 方式进行请求
     * 按 RESTFUL 规范说明 ： PATCH 通常用来做对象的修改
     *
     * @param url 请求接口链接地址
     * @param param 请求参数，调用时会参数的 `json格式` 传给接口
     * @param callback 回调函数，如果没有设置，则返回一个 Promise对象
     * @returns 如果没有指定回调函数，则返回一个 Promise对象
     *
     * 代码示例：
     * ```javascript
     * // 通过 回调函数 使用
     * import {Ajax} from 'utils'
     * Ajax.PATCH('/api-url',{status:0,find:'name'},json=>console.log(json));
     *
     * // 通过 异步队列 使用
     * const resp = yield Ajax.PATCH('/api-url',{status:0,find:'name'});
     * console.log(resp);
     * ```
    */
    static PATCH(url: any, param: any, callback?: Function): Promise<any>;
    /**
     * 发送 HTTP DELETE 请求，支持 **回调函数** 与 **异步队列** 方式进行请求
     * 按 RESTFUL 规范说明 ： DELETE 通常用来做对象的删除
     *
     * @param url 请求接口链接地址
     * @param param 请求参数，调用时会参数的 `json格式` 传给接口
     * @param callback 回调函数，如果没有设置，则返回一个 Promise对象
     * @returns 如果没有指定回调函数，则返回一个 Promise对象
     *
     * 代码示例：
     * ```javascript
     * // 通过 回调函数 使用
     * import {Ajax} from 'utils'
     * Ajax.DELETE('/api-url',{status:0,find:'name'},json=>console.log(json));
     *
     * // 通过 异步队列 使用
     * const resp = yield Ajax.DELETE('/api-url',{status:0,find:'name'});
     * console.log(resp);
     * ```
    */
    static DELETE(url: any, param: any, callback?: Function): Promise<any>;
    /**
     * 请多个请求一起返回了再处理，两个以上请求时，可以使用
     * @param  异步请求列表
     * 示例
     * ```
      Ajax.WHEN(
          Ajax.GET('/api-common/user'),
          Ajax.GET('/api-common/user/ip'),
          Ajax.POST('/api-common/user',{})
      ).then(function(resp){
          console.log(resp[0],resp[1],resp[2]);
      });
     * ```
    */
    static WHEN(...pos: Promise<void>[]): Promise<void[]>;
    /**
     * 注册需要缓存的链接地址
     * 此URL 在一次打开的过程中只会请求一次，
     * @param urls 接口地址列表，只支持 GET 接口
     * 如果需要清除，可以调用 Ajax.CLEAR(url) 来清除
     * 示例
     * ```
     * Ajax.SESSION('/url1','/url2','/url3');
     * Ajax.GET('/url1');
     * Ajax.GET('/url1');
     * Ajax.GET('/url1');
     * Ajax.CLEAR('/url1','/url2');
     * ```
     *
    */
    static SESION(...urls: string[]): void;
    /**
     * 清除接口本地缓存
     * @param urls 接口地址列表，只支持 GET 接口
     * 如果需要清除，可以调用 Ajax.CLEAR(url) 来清除
     * 示例
     * ```
     * Ajax.SESSION('/url1','/url2','/url3');
     * Ajax.GET('/url1');
     * Ajax.GET('/url1');
     * Ajax.GET('/url1');
     * Ajax.CLEAR('/url1','/url2');
     * ```
     *
    */
    static CLEAR(...urls: string[]): void;
    /**
     *  一个等待的方法，通常用于 effect 里面延迟
    */
    static WAIT(seconds?: number): Promise<unknown>;
    static UPLOAD(file: any, callback: {
        success: Function;
        progress?: Function;
        error?: Function;
    }, param?: {
        namespace?: string;
        userName?: string;
        userId?: string;
    }, url?: string): void;
}
