Refactoring
Some checks failed
Lint / lint (push) Failing after 11s

This commit is contained in:
Julien Valverdé
2025-08-25 18:23:20 +02:00
parent 4845e34b0a
commit ae3aa00a06

View File

@@ -6,28 +6,26 @@ 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> : [K in keyof T as K extends number ? K : never]:
| readonly [K]
| readonly [K, ...Paths<T[K], Prev[D], Seen | T>]
} extends infer O
? O[keyof O]
: never
:
T extends object ? {
[K in keyof T as K extends string | number | symbol ? K : never]-?:
NonNullable<T[K]> extends infer V
? readonly [K] | readonly [K, ...Paths<V, Prev[D], Seen>]
: never
} extends infer O
? O[keyof O]
: never
:
never never
) )
export type ArrayPaths<T extends readonly any[], D extends number, Seen> = {
[K in keyof T as K extends number ? K : never]:
| readonly [K]
| readonly [K, ...Paths<T[K], Prev[D], Seen>]
} extends infer O
? O[keyof O]
: never
export type ObjectPaths<T extends object, D extends number, Seen> = {
[K in keyof T as K extends string | number | symbol ? K : never]-?:
NonNullable<T[K]> extends infer V
? readonly [K] | readonly [K, ...Paths<V, Prev[D], Seen>]
: never
} extends infer O
? O[keyof O]
: 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
? ValueFromPath<T[Head], Tail> ? ValueFromPath<T[Head], Tail>