declare function setPath(object: T, path: string | (string | number)[], value: unknown): T; declare const getPath: (object: any, path: string | (string | number)[]) => any; declare const stringToPathArray: (path: T) => (string | number)[]; declare const pathArrayToString: (path: (string | number)[]) => string; type GenericObject = { [key: string]: any; }; declare const toPathObject: (obj: GenericObject) => Record; declare const mergePathStrings: (...paths: (string | number | null | undefined)[]) => string; type PathKey = string | number; /** * Checks whether the type is any * See {@link https://stackoverflow.com/a/49928360/3406963} * @typeParam T - type which may be any * ``` * IsAny = true * IsAny = false * ``` */ type IsAny = 0 extends 1 & T ? true : false; type ValidStringPaths = StringPaths, true>; type ValidStringPathsToArrays = StringPaths | readonly any[]>, true>; type PathSegment = Root extends true ? `${Segment}` : Segment extends number ? `[${Segment}]` : `.${Segment}`; type StringPaths = Tuple extends [infer Item extends PathKey] ? PathSegment : Tuple extends [infer Head extends PathKey, ...infer Rest extends PathKey[]] ? `${PathSegment}${StringPaths}` : never; type CoerceNumbers = Str extends `${infer Num extends number}` ? Num : Str; type NormalizePath = Str extends `${infer Head}[${infer Prop extends number}]` ? `${Head}.${Prop}` : Str extends `${infer Head}[${infer Prop extends number}]${infer Tail}` ? `${Head}.${Prop}${NormalizePath}` : Str; type StringToPathTupleImpl = S extends `${infer Head}.${infer Tail}` ? [CoerceNumbers, ...StringToPathTupleImpl] : [CoerceNumbers]; type StringToPathTuple = StringToPathTupleImpl>; type Path = [], AssignableTo = any> = (Obj extends AssignableTo ? Prefix : never) | (Prefix["length"] extends 10 ? never : Obj extends Primitive ? never : IsAny extends true ? never : Obj extends Array ? PathsOfArray : PathsOfObject); type PathsOfArray, AssignableTo = any> = Path; type PathsOfObject, AssignableTo = any> = { [K in keyof Obj]: K extends PathKey ? Path : never; }[keyof Obj]; type ValueAtPath = []> = ObjPath extends [] ? Obj : ObjPath extends [infer Head, ...infer Tail] ? Tail extends Array ? Head extends keyof Obj ? ValueAtPath : never : never : never; type SupportsValueAtPath, Value> = Value extends ValueAtPath ? Obj : never; type Primitive = boolean | number | string | symbol | null | undefined; export { type IsAny, type StringToPathTuple, type SupportsValueAtPath, type ValidStringPaths, type ValidStringPathsToArrays, type ValueAtPath, getPath, mergePathStrings, pathArrayToString, setPath, stringToPathArray, toPathObject };