import { Ref } from 'vue';

type Option<R, P> = {
    /** 是否需要uni.showLoading */
    useUniLoading?: boolean;
    /**
     * 每次 ready 从 false 变为 true 时, 都会自动发起请求
     * 为 false 时，请求永远都不会发出
     */
    ready?: boolean | Ref<boolean>;
    /** 立即执行  */
    manual?: boolean;
    /**
     * 默认参数
     * 分页参数在请放入 分页参数配置中
     */
    defaultParams?: P;
    /** 依赖刷新 */
    refreshDeps?: any[];
    /**
     * 延迟结束loading
     * 单位毫秒
     * 防止请求过快造成渲染闪烁
     */
    loadingDelay?: number;
    /**
     * 轮询间隔
     * 通过 run/runAsync 来启动轮询
     * 通过 cancel 取消轮询
     */
    pollingInterval?: number;
    /**
     * 轮询错误重试次数
     */
    pollingErrorRetryCount?: number;
    /**
     * 错误重试次数
     */
    errorRetryCount?: number;
    /**
     * 错误重试间隔
     */
    errorRetryDelay?: number;
    /**
     * 防抖等待时间
     */
    debounceWait?: number;
    /**
     * 在防抖开始前执行调用
     */
    debounceLeading?: boolean;
    /**
     * 在防抖结束后执行调用
     */
    debounceTrailing?: boolean;
    /**
     * 节流等待时间
     */
    throttleWait?: number;
    /**
     * 在节流开始前执行调用
     */
    throttleLeading?: boolean;
    /**
     * 在节流结束后执行调用
     */
    throttleTrailing?: boolean;
    /**
     * 使用分页
     */
    usePagination?: boolean;
    /**
     * 分页配置
     *
     */
    paginationConfig?: {
        /** 当前页码参数名，默认 'current' */
        currentKey?: string;
        /** 每页数量参数名，默认 'pageSize'  */
        pageSizeKey?: string;
        /** 总数字段名，默认 'total' */
        totalKey?: string;
        /** 默认当前页，默认 1 */
        defaultCurrent?: number;
        /** 默认每页数量，默认 10 */
        defaultPageSize?: number;
        /** 列表字段名，默认 'list' */
        listKey?: string;
    };
    /** 请求前 */
    onBefore?: () => Promise<void> | void;
    /** 请求成功 */
    onSuccess?: (result: R | undefined, params?: P) => void;
    /** 请求失败 */
    onError?: (error: any) => void;
    /** 请求完成 */
    onFinally?: () => void;
};
export type Service<R, P extends any[]> = (...args: P) => Promise<R>;
declare const useRequest: <R, P extends any[]>(service: Service<R, P>, option?: Option<R, P> | undefined) => {
    data: Ref<R | undefined, R | undefined>;
    setData: (value: R) => void;
    loading: Ref<boolean, boolean>;
    setLoading: (value: boolean) => void;
    run: (...params: P) => void;
    runAsync: (...params: P) => Promise<R | undefined>;
    refresh: () => void;
    refreshAsync: () => Promise<R | undefined> | undefined;
    cancel: () => void;
    pagination: import('vue').ShallowReactive<{
        current: number;
        pageSize: number;
        total: number;
        totalPage: number;
        hasMore: boolean;
        setCurrent: (current: number) => void;
        setPageSize: (pageSize: number) => void;
        reset: () => void;
        prev: () => void;
        next: () => void;
        change: (current: number, pageSize: number) => void;
    }> | undefined;
    list: Ref<import('@vue/reactivity').UnwrapRefSimple<R>[], R[] | import('@vue/reactivity').UnwrapRefSimple<R>[]>;
};
export default useRequest;
//# sourceMappingURL=index.d.ts.map