import { IUseFieldRet, IUseFieldValueRet } from './useFields';
declare type IUserFieldRet<T extends object, K extends keyof T, E, P> = [
    busy: boolean,
    state: IUseFieldValueRet<T[K], K> & P,
    error: E | undefined,
    setValue: (value: T[K], disableAutoSave?: boolean) => void
];
export interface IUseFieldProps {
    disableAutoSave?: boolean;
}
export declare function useField<T extends object, K extends keyof T, E, P>(crud: IUseFieldRet<T, E, P>, key: K, props?: IUseFieldProps): IUserFieldRet<T, K, E, P>;
export declare type DotObject<T> = {
    [K in Path<T>]: PathValue<T, K>;
};
export declare type PathImpl<T, K extends keyof T> = K extends string ? T[K] extends Record<string, any> ? T[K] extends ArrayLike<any> ? K | `${K}.${PathImpl<T[K], Exclude<keyof T[K], keyof any[]>>}` : K | `${K}.${PathImpl<T[K], keyof T[K]>}` : K : never;
export declare type Path<T> = PathImpl<T, keyof T> | keyof T;
export declare type PathValue<T, P extends Path<T>> = P extends `${infer K}.${infer Rest}` ? K extends keyof T ? Rest extends Path<T[K]> ? PathValue<T[K], Rest> : never : never : P extends keyof T ? T[P] : never;
export {};
