export declare enum EnumTaskState {
    IDLE = "IDLE",
    PENDING = "PENDING",
    SUCCESS = "SUCCESS",
    FAIL = "FAIL",
    CANCELED = "CANCELED"
}
export type UnwrapPromise<T> = T extends Promise<infer U> ? U : T;
export type TTaskType = (...args: any[]) => Promise<any>;
export type UseTaskProps<TTask extends TTaskType, TError extends any = any> = {
    task: TTask;
    startLoadingOnBeforeStart?: boolean;
    onBeforeStart?: () => Promise<boolean>;
    onSuccess?(data: UnwrapPromise<ReturnType<TTask>> | undefined, others: {
        params: [...Parameters<TTask>];
    }): void;
    onError?(error: TError | undefined, others: {
        params: [...Parameters<TTask>];
    }): void;
    onFinally?(others?: {
        params: [...Parameters<TTask>];
    }): void;
    preserve?: boolean;
    preserveWhenError?: boolean;
    loadingAtInit?: boolean;
    debounceTime?: number;
};
export default function useTask<TTask extends (...args: any[]) => Promise<any>, TError extends any>({ task, startLoadingOnBeforeStart, onBeforeStart, onSuccess, onError, onFinally, preserve, preserveWhenError, loadingAtInit, debounceTime, }: UseTaskProps<TTask, TError>): {
    data: UnwrapPromise<ReturnType<TTask>> | undefined;
    error: TError | undefined;
    state: "PENDING" | "IDLE" | "SUCCESS" | "FAIL" | "CANCELED";
    isIdle: boolean;
    isLoading: boolean;
    isSuccess: boolean;
    isError: boolean;
    run: (...args: Parameters<typeof task>) => void;
    runAsync: (...args: Parameters<typeof task>) => Promise<UnwrapPromise<ReturnType<TTask>> | undefined>;
    cancel: () => void;
};
