diff --git a/packages/reffuse/src/types/PropertyPath.ts b/packages/reffuse/src/types/PropertyPath.ts index 2a19a8f..dda0959 100644 --- a/packages/reffuse/src/types/PropertyPath.ts +++ b/packages/reffuse/src/types/PropertyPath.ts @@ -1,25 +1,28 @@ import { Array, Function, Option, Predicate } from "effect" -export type Paths = [] | ( +type Prev = readonly [never, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] + +export type Paths = [] | ( + D extends never ? [] : T extends Seen ? [] : - T extends readonly any[] ? ArrayPaths : - T extends object ? ObjectPaths : + T extends readonly any[] ? ArrayPaths : + T extends object ? ObjectPaths : never ) -export type ArrayPaths = { +export type ArrayPaths = { [K in keyof T as K extends number ? K : never]: | [K] - | [K, ...Paths] + | [K, ...Paths] } extends infer O ? O[keyof O] : never -export type ObjectPaths = { +export type ObjectPaths = { [K in keyof T as K extends string | number | symbol ? K : never]-?: NonNullable extends infer V - ? [K] | [K, ...Paths] + ? [K] | [K, ...Paths] : never } extends infer O ? O[keyof O]