froebel
Version:
TypeScript utility library
19 lines (18 loc) • 845 B
TypeScript
export declare const none: unique symbol;
/**
* Returns the value in `obj` at `path`. If the given path does not exist,
* the symbol `none` is returned.
*
* @example
* ```
* // -> 'something'
* select(
* { a: { deeply: [{ nested: { object: 'something' } }] } },
* 'a', 'deeply', 0, 'nested', 'object'
* )
* ```
*/
declare const select: <T, P extends AnyNarrow[]>(obj: T, ...path: P) => PickPath<T, P>;
export default select;
declare type AnyNarrow = string | number | symbol | boolean | undefined | null | Record<string | number | symbol, unknown>;
declare type PickPath<T, P extends unknown[]> = P extends [] ? T : T extends Map<infer K, infer V> ? (P[0] extends K ? V | typeof none : typeof none) : P[0] extends keyof T ? PickPath<T[P[0]], P extends [unknown, ...infer R] ? R : []> : unknown extends T ? unknown : typeof none;