diff --git a/packages/effect-fc/src/types/PropertyPath.ts b/packages/effect-fc/src/types/PropertyPath.ts index a779e1e..0f26cf8 100644 --- a/packages/effect-fc/src/types/PropertyPath.ts +++ b/packages/effect-fc/src/types/PropertyPath.ts @@ -6,28 +6,26 @@ type Prev = readonly [never, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] export type Paths = readonly [] | ( D extends never ? readonly [] : T extends Seen ? readonly [] : - T extends readonly any[] ? ArrayPaths : - T extends object ? ObjectPaths : + T extends readonly any[] ? { + [K in keyof T as K extends number ? K : never]: + | readonly [K] + | readonly [K, ...Paths] + } extends infer O + ? O[keyof O] + : never + : + T extends object ? { + [K in keyof T as K extends string | number | symbol ? K : never]-?: + NonNullable extends infer V + ? readonly [K] | readonly [K, ...Paths] + : never + } extends infer O + ? O[keyof O] + : never + : never ) -export type ArrayPaths = { - [K in keyof T as K extends number ? K : never]: - | readonly [K] - | readonly [K, ...Paths] -} extends infer O - ? O[keyof O] - : never - -export type ObjectPaths = { - [K in keyof T as K extends string | number | symbol ? K : never]-?: - NonNullable extends infer V - ? readonly [K] | readonly [K, ...Paths] - : never -} extends infer O - ? O[keyof O] - : never - export type ValueFromPath = P extends [infer Head, ...infer Tail] ? Head extends keyof T ? ValueFromPath