import { SWRConfiguration, SWRResponse } from 'swr';
type ValueKey = string | any[] | null;
type AspidaSWROption<T> = T & {
    /**
     * @deprecated
     * Will be dropped next major release.
     * Use key and fetcher options instead.
     *    key: enabled ? undefined : null,
     *    fetcher: enabled ? undefined : null
     */
    enabled?: boolean;
    key?: ValueKey | (() => ValueKey);
    fetcher?: ((f: (opt: AspidaSWROption<T>) => any) => (opt: AspidaSWROption<T>) => any) | null | undefined;
};
type Options<T extends (option: any) => Promise<any>> = Parameters<Parameters<T> extends [Parameters<T>[0]] ? (option: AspidaSWROption<Parameters<T>[0] & SWRConfiguration<ResponseData<T>>>) => void : (option?: AspidaSWROption<Parameters<T>[0] & SWRConfiguration<ResponseData<T>>>) => void>;
type ResponseData<T extends (option: any) => Promise<any>> = ReturnType<T> extends Promise<infer S> ? S : never;
declare function getAspidaSWRDefaultKey<T extends Record<string, any> & {
    $get: (option: any) => Promise<any>;
    $path: (option?: any) => string;
}>(api: T, ...option: Options<T['$get']>): string[];
declare function getAspidaSWRDefaultKey<T extends Record<string, any> & {
    $path: (option?: any) => string;
}, U extends {
    [K in keyof T]: T[K] extends (option: any) => Promise<any> ? K : never;
}[keyof T]>(api: T, method: U, ...option: Options<T[U]>): string[];
export { getAspidaSWRDefaultKey as getSWRDefaultKey };
declare function useAspidaSWR<T extends Record<string, any> & {
    $get: (option: any) => Promise<any>;
    $path: (option?: any) => string;
}>(api: T, ...option: Options<T['$get']>): SWRResponse<ResponseData<T['$get']>, any>;
declare function useAspidaSWR<T extends Record<string, any> & {
    $path: (option?: any) => string;
}, U extends {
    [K in keyof T]: T[K] extends (option: any) => Promise<any> ? K : never;
}[keyof T]>(api: T, method: U, ...option: Options<T[U]>): SWRResponse<ResponseData<T[U]>, any>;
export default useAspidaSWR;
//# sourceMappingURL=index.d.ts.map