Skip to content

Instantly share code, notes, and snippets.

@siassaj
Created October 27, 2020 01:50
Show Gist options
  • Save siassaj/b0de2e770982793263a42e5e62674b6d to your computer and use it in GitHub Desktop.
Save siassaj/b0de2e770982793263a42e5e62674b6d to your computer and use it in GitHub Desktop.
type E<T> = Exclude<T, undefined | null>
export function pathOr<
D extends any,
O extends object,
P0 extends keyof E<O>,
V0 extends E<O>[P0],
>(def: D, path: [P0], obj: O): D | V0;
export function pathOr<
D extends any,
O extends object,
P0 extends keyof E<O>,
V0 extends E<O>[P0],
P1 extends keyof E<V0>,
V1 extends E<V0>[P1],
>(def: D, path: [P0, P1], obj: O): D | V1;
export function pathOr<
D extends any,
O extends object,
P0 extends keyof E<O>,
V0 extends E<O>[P0],
P1 extends keyof E<V0>,
V1 extends E<V0>[P1],
P2 extends keyof E<V1>,
V2 extends E<V1>[P2],
>(def: D, path: [P0, P1, P2], obj: O): D | V2;
export function pathOr<
D extends any,
O extends object,
P0 extends keyof E<O>,
V0 extends E<O>[P0],
P1 extends keyof E<V0>,
V1 extends E<V0>[P1],
P2 extends keyof E<V1>,
V2 extends E<V1>[P2],
P3 extends keyof E<V2>,
V3 extends E<V2>[P3],
>(def: D, path: [P0, P1, P2, P3], obj: O): D | V3;
export function pathOr<
D extends any,
O extends object,
P0 extends keyof E<O>,
V0 extends E<O>[P0],
P1 extends keyof E<V0>,
V1 extends E<V0>[P1],
P2 extends keyof E<V1>,
V2 extends E<V1>[P2],
P3 extends keyof E<V2>,
V3 extends E<V2>[P3],
P4 extends keyof E<V3>,
V4 extends E<V2>[P4],
>(def: D, path: [P0, P1, P2, P3, P4], obj: O): D | V4;
export function pathOr<
D extends any,
O extends object,
P0 extends keyof E<O>,
V0 extends E<O>[P0],
P1 extends keyof E<V0>,
V1 extends E<V0>[P1],
P2 extends keyof E<V1>,
V2 extends E<V1>[P2],
P3 extends keyof E<V2>,
V3 extends E<V2>[P3],
P4 extends keyof E<V3>,
V4 extends E<V2>[P4],
P5 extends keyof E<V4>,
V5 extends E<V2>[P5],
>(def: D, path: [P0, P1, P2, P3, P4, P5], obj: O): D | V5;
export function pathOr<
D extends any,
O extends object,
P0 extends keyof E<O>,
V0 extends E<O>[P0],
P1 extends keyof E<V0>,
V1 extends E<V0>[P1],
P2 extends keyof E<V1>,
V2 extends E<V1>[P2],
P3 extends keyof E<V2>,
V3 extends E<V2>[P3],
P4 extends keyof E<V3>,
V4 extends E<V2>[P4],
P5 extends keyof E<V4>,
V5 extends E<V2>[P5],
P6 extends keyof E<V5>,
V6 extends E<V2>[P6],
>(def: D, path: [P0, P1, P2, P3, P4, P5, P6], obj: O): D | V6;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment