Your Web News in One Place

Help Webnuz

Referal links:

Sign up for GreenGeeks web hosting
December 14, 2022 09:01 am GMT

Typescript Generate Full Path Type And Get Value Type Of Nested Object

Before TS 4.8, it is impossible to build path type for numeric literal path type for type like { A: { 123: boolean } }<-- we want something like A/123 but it is not possible

however generate path type for { A: Record<number, boolean> } is possible, that is A/${number}

With TS 4.8, Improved Inference for infer Types in Template String Types made numeric literal path possible

type DeepKey<    T,    K extends keyof T = keyof T> = K extends string | number// handle numeric key    ? T[K] extends infer R        ? R extends Record<string, unknown>            ?            | `${K}`            | `${K}/${DeepKey<R>}`            : `${K}`        : never // impossible route    : never // impossible routetype DeepValue<    T,    P extends DeepKey<T>,> = P extends `${infer K}/${infer Rest}`    ? T[(K extends `${infer R extends number}` ? R : K) & keyof T] extends infer S        ? Rest extends DeepKey<S>            ? DeepValue<S, Rest>            : never // impossible route        : never // impossible route    : T[(P extends `${infer R extends number}` ? R : P) & keyof T]

Image description

playground


Original Link: https://dev.to/tylim88/typescript-generate-full-path-type-and-get-value-type-for-nested-object-4hi

Share this article:    Share on Facebook
View Full Article

Dev To

An online community for sharing and discovering great ideas, having debates, and making friends

More About this Source Visit Dev To