diff --git a/packages/example/src/routes/tests.tsx b/packages/example/src/routes/tests.tsx index c673f9e..82ca80b 100644 --- a/packages/example/src/routes/tests.tsx +++ b/packages/example/src/routes/tests.tsx @@ -4,15 +4,16 @@ import { createFileRoute } from "@tanstack/react-router" import { GetRandomValues, makeUuid4 } from "@typed/id" import { Console, Effect, Option } from "effect" import { useEffect, useState } from "react" -import { PropertyPath } from "reffuse/types" interface Node { - readonly value: string - readonly left?: Node - readonly right?: Node + value: string + left?: Leaf + right?: Leaf +} +interface Leaf { + node: Node } -type NodePaths = PropertyPath.Paths const makeUuid = Effect.provide(makeUuid4, GetRandomValues.CryptoRandom) diff --git a/packages/reffuse/src/types/PropertyPath.ts b/packages/reffuse/src/types/PropertyPath.ts index 50e35ed..1cf005f 100644 --- a/packages/reffuse/src/types/PropertyPath.ts +++ b/packages/reffuse/src/types/PropertyPath.ts @@ -17,9 +17,10 @@ export type ArrayPaths = { : never export type ObjectPaths = { - [K in keyof T as K extends string | number | symbol ? K : never]: - | [K] - | [K, ...Paths] + [K in keyof T as K extends string | number | symbol ? K : never]-?: + NonNullable extends infer V + ? [K] | [K, ...Paths] + : never } extends infer O ? O[keyof O] : never