export declare enum UseRequestStatus {
    Idle = "idle",
    Pending = "pending",
    Completed = "completed",
    Failed = "failed"
}
export type PatchedState = false | 'manual' | 'auto';
export interface UseRequestOptions<Value, Arguments extends unknown[]> {
    deps?: Arguments | null;
    optimisticPatch?: Value | ((args: Arguments) => Value);
}
export declare function useRequest<Value, ErrorValue extends unknown = unknown, Arguments extends unknown[] = unknown[]>(request: (...args: [...Arguments, ...any[]]) => Promise<Value> | Value, options?: Arguments | UseRequestOptions<Value, Arguments> | null): Request<Value, ErrorValue, Arguments>;
export default useRequest;
export interface State<Value = unknown, ErrorValue = unknown> {
    status: UseRequestStatus;
    value?: Value | undefined;
    error?: ErrorValue | undefined;
}
export interface PatchInput<Value, ErrorValue> {
    value?: Value;
    error?: ErrorValue;
}
export interface Request<Value = unknown, ErrorValue = unknown, Args extends unknown[] = unknown[]> extends State<Value, ErrorValue> {
    idle: boolean;
    pending: boolean;
    completed: boolean;
    failed: boolean;
    patched: PatchedState;
    reset: () => void;
    resetPatch: () => void;
    patch: (input: PatchInput<Value, ErrorValue> | ((current: {
        value?: Value;
        error?: ErrorValue;
    }) => PatchInput<Value, ErrorValue>)) => void;
    patchValue: (input: Value | ((current: Value | undefined) => Value)) => void;
    execute: (...args: Args) => Promise<Value>;
}
