UNPKG

@ewb/reach-react

Version:
19 lines (18 loc) 1.14 kB
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 {};