0.1.4 #5
@@ -6,27 +6,25 @@ type Prev = readonly [never, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
|
|||||||
export type Paths<T, D extends number = 5, Seen = never> = readonly [] | (
|
export type Paths<T, D extends number = 5, Seen = never> = readonly [] | (
|
||||||
D extends never ? readonly [] :
|
D extends never ? readonly [] :
|
||||||
T extends Seen ? readonly [] :
|
T extends Seen ? readonly [] :
|
||||||
T extends readonly any[] ? ArrayPaths<T, D, Seen | T> :
|
T extends readonly any[] ? {
|
||||||
T extends object ? ObjectPaths<T, D, Seen | T> :
|
|
||||||
never
|
|
||||||
)
|
|
||||||
|
|
||||||
export type ArrayPaths<T extends readonly any[], D extends number, Seen> = {
|
|
||||||
[K in keyof T as K extends number ? K : never]:
|
[K in keyof T as K extends number ? K : never]:
|
||||||
| readonly [K]
|
| readonly [K]
|
||||||
| readonly [K, ...Paths<T[K], Prev[D], Seen>]
|
| readonly [K, ...Paths<T[K], Prev[D], Seen | T>]
|
||||||
} extends infer O
|
} extends infer O
|
||||||
? O[keyof O]
|
? O[keyof O]
|
||||||
: never
|
: never
|
||||||
|
:
|
||||||
export type ObjectPaths<T extends object, D extends number, Seen> = {
|
T extends object ? {
|
||||||
[K in keyof T as K extends string | number | symbol ? K : never]-?:
|
[K in keyof T as K extends string | number | symbol ? K : never]-?:
|
||||||
NonNullable<T[K]> extends infer V
|
NonNullable<T[K]> extends infer V
|
||||||
? readonly [K] | readonly [K, ...Paths<V, Prev[D], Seen>]
|
? readonly [K] | readonly [K, ...Paths<V, Prev[D], Seen>]
|
||||||
: never
|
: never
|
||||||
} extends infer O
|
} extends infer O
|
||||||
? O[keyof O]
|
? O[keyof O]
|
||||||
: never
|
: never
|
||||||
|
:
|
||||||
|
never
|
||||||
|
)
|
||||||
|
|
||||||
export type ValueFromPath<T, P extends readonly any[]> = P extends [infer Head, ...infer Tail]
|
export type ValueFromPath<T, P extends readonly any[]> = P extends [infer Head, ...infer Tail]
|
||||||
? Head extends keyof T
|
? Head extends keyof T
|
||||||
|
|||||||
Reference in New Issue
Block a user