type ObjectType = { [key: string]: any; }; type ArrayType = any[]; type DeepGetResult = P extends `${infer Key}.${infer Rest}` ? Key extends keyof T ? T[Key] extends ObjectType | ArrayType ? DeepGetResult : undefined : T extends ArrayType ? number extends keyof T ? DeepGetResult : undefined : undefined : P extends `${infer Key}[${infer Index}]` ? Key extends keyof T ? T[Key] extends ArrayType ? Index extends `${number}` ? DeepGetResult : undefined : undefined : T extends ArrayType ? number extends keyof T ? DeepGetResult : undefined : undefined : P extends keyof T ? T[P] : T extends ArrayType ? number extends keyof T ? T[number] : undefined : undefined; /** * Get a property's value deep inside the structure of an array/object * * Example: * const myObj = { * a: 2, * b: [ * {price : 2}, * {price : 4}, * ], * }; * deepGet(myObj, 'b[0].price'); * Output: * 2 * * @param {Record|unknown[]} obj - Object/Array to get the value from * @param {string} path - Path string to deeply get the value at * @param {boolean} get_parent - If passed as true retrieves the parent of where the value lives * @throws {TypeError} */ declare function deepGet(obj: T, path: P, get_parent?: boolean): DeepGetResult | undefined; export { deepGet, deepGet as default };