import type { Ref, UnwrapRef } from 'vue';
export interface UseRequestReturnBase<Data, Params extends any[], Shallow extends boolean> {
    state: Shallow extends true ? Ref<Data> : Ref<UnwrapRef<Data>>;
    isReady: Ref<boolean>;
    isLoading: Ref<boolean>;
    error: Ref<unknown>;
    execute: (delay?: number, ...args: Params) => Promise<Data>;
}
export type UseRequestReturn<Data, Params extends any[], Shallow extends boolean> = UseRequestReturnBase<Data, Params, Shallow> & PromiseLike<UseRequestReturnBase<Data, Params, Shallow>>;
export interface UseRequestOptions<Shallow extends boolean, D = any> {
    delay?: number;
    immediate?: boolean;
    onError?: (e: unknown) => void;
    onSuccess?: (data: D) => void;
    resetOnExecute?: boolean;
    shallow?: Shallow;
    throwError?: boolean;
}
export declare function useRequest<Data, Params extends any[] = any[], Shallow extends boolean = true>(promise: Promise<Data> | ((...args: Params) => Promise<Data>), initialState?: Data, options?: UseRequestOptions<Shallow, Data>): UseRequestReturn<Data, Params, Shallow>;
