UNPKG

react-hook-deep-state

Version:

![NPM Version](https://img.shields.io/npm/v/react-hook-deep-state) ![NPM Last Update](https://img.shields.io/npm/last-update/react-hook-deep-state) ![NPM Type Definitions](https://img.shields.io/npm/types/react-hook-deep-state) ![NPM Downloads](https://im

27 lines (18 loc) 1.33 kB
declare type DeepPartial<T> = T extends object ? { [P in keyof T]?: DeepPartial<T[P]>; } : T; declare type NestedPaths<T> = T extends object ? { [K in keyof T]-?: K extends string ? T[K] extends unknown[] ? `${K}` : T[K] extends object ? `${K}` | `${K}.${NestedPaths<NonNullable<T[K]>>}` : `${K}` : never; }[keyof T] : never; declare type PartialPathValue<T, P> = P extends NestedPaths<T> ? DeepPartial<Path<T, P>> : DeepPartial<T>; declare type Path<T, K extends string> = K extends `${infer Key}.${infer Rest}` ? Key extends keyof T ? Path<T[Key], Rest> : never : K extends keyof T ? T[K] : never; declare type PathValue<T, P> = P extends NestedPaths<T> ? Path<T, P> : T; declare type StateType = Record<string, unknown> | undefined | null; declare type StateValue<T, P, M extends boolean> = M extends true ? PartialPathValue<T, P> : PathValue<T, P>; /** * A custom hook for managing deeply nested state objects with type safety. * @param initialState - The initial state object * @returns [state, setState] tuple with strongly typed path-based setter */ export declare function useDeepState<T extends StateType>(initialState?: T): readonly [T, <P extends "" | NestedPaths<T> | undefined, M extends boolean>(value: StateValue<T, P, M>, path?: P, merge?: M) => void]; export { }