Skip to content

Commit 9e9fd88

Browse files
committed
chore: attempt 4
1 parent a785c78 commit 9e9fd88

File tree

1 file changed

+14
-6
lines changed

1 file changed

+14
-6
lines changed

packages/form-core/src/util-types.ts

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,10 @@ type AddEndIfDynamic<T extends string> = AddEnd<T> extends T ? AddEnd<T> : T
2727
export interface AnyDeepKeyAndValue<
2828
K extends string = string,
2929
V extends any = any,
30+
L extends string = string,
3031
> {
3132
key: K
33+
lookup: L
3234
value: V
3335
}
3436

@@ -40,6 +42,7 @@ export interface ArrayDeepKeyAndValue<
4042
in out T extends ReadonlyArray<any>,
4143
> extends AnyDeepKeyAndValue {
4244
key: ArrayAccessor<TParent>
45+
lookup: ArrayAccessor<TParent>
4346
value: T[number] | Nullable<TParent['value']>
4447
}
4548

@@ -64,6 +67,7 @@ export interface TupleDeepKeyAndValue<
6467
in out TKey extends AllTupleKeys<T>,
6568
> extends AnyDeepKeyAndValue {
6669
key: TupleAccessor<TParent, TKey>
70+
lookup: TupleAccessor<TParent, TKey>
6771
value: T[TKey] | Nullable<TParent['value']>
6872
}
6973

@@ -105,6 +109,7 @@ export interface ObjectDeepKeyAndValue<
105109
in out TKey extends AllObjectKeys<T>,
106110
> extends AnyDeepKeyAndValue {
107111
key: ObjectAccessor<TParent, TKey>
112+
lookup: AddEndIfDynamic<ObjectAccessor<TParent, TKey>>
108113
value: ObjectValue<TParent, T, TKey>
109114
}
110115

@@ -127,6 +132,7 @@ export type UnknownAccessor<TParent extends AnyDeepKeyAndValue> =
127132
export interface UnknownDeepKeyAndValue<TParent extends AnyDeepKeyAndValue>
128133
extends AnyDeepKeyAndValue {
129134
key: UnknownAccessor<TParent>
135+
lookup: UnknownAccessor<TParent>
130136
value: unknown
131137
}
132138

@@ -163,22 +169,24 @@ export type DeepKeys<T> = unknown extends T
163169
: DeepKeysAndValues<T>['key']
164170

165171
type DeepRecord<T> = {
166-
[K in DeepKeysAndValues<T> as AddEndIfDynamic<K['key']>]: K['value']
172+
[K in DeepKeysAndValues<T> as K['lookup']]: K['value']
167173
}
168174

169175
type DeepValueImpl<
170176
TDeepRecord extends DeepRecord<unknown>,
171-
TAccessor extends string,
172-
> = [TAccessor] extends [keyof TDeepRecord]
173-
? TDeepRecord[TAccessor]
174-
: TDeepRecord[AddEnd<TAccessor>]
177+
TAccessor extends DeepKeys<unknown>,
178+
> = TDeepRecord[TAccessor] extends never
179+
? TDeepRecord[AddEnd<TAccessor>]
180+
: TDeepRecord[TAccessor]
175181

176182
/**
177183
* Infer the type of a deeply nested property within an object or an array.
178184
*/
179185
export type DeepValue<TValue, TAccessor extends string> = unknown extends TValue
180186
? TValue
181-
: DeepValueImpl<DeepRecord<TValue>, TAccessor>
187+
: TAccessor extends DeepKeys<TValue>
188+
? DeepValueImpl<DeepRecord<TValue>, TAccessor>
189+
: never
182190

183191
type Foo = {
184192
a: string

0 commit comments

Comments
 (0)