diff --git a/packages/example/src/routes/tests.tsx b/packages/example/src/routes/tests.tsx index 82ca80b..1bd85eb 100644 --- a/packages/example/src/routes/tests.tsx +++ b/packages/example/src/routes/tests.tsx @@ -7,12 +7,12 @@ import { useEffect, useState } from "react" interface Node { - value: string - left?: Leaf - right?: Leaf + value: string + left?: Leaf + right?: Leaf } interface Leaf { - node: Node + node: Node } diff --git a/packages/reffuse/package.json b/packages/reffuse/package.json index 25bab7a..f2ab6b9 100644 --- a/packages/reffuse/package.json +++ b/packages/reffuse/package.json @@ -1,6 +1,6 @@ { "name": "reffuse", - "version": "0.1.12", + "version": "0.1.13", "type": "module", "files": [ "./README.md", diff --git a/packages/reffuse/src/types/PropertyPath.ts b/packages/reffuse/src/types/PropertyPath.ts index 1cf005f..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]