diff options
Diffstat (limited to 'packages/exchange-backoffice-ui/src/handlers/useField.ts')
-rw-r--r-- | packages/exchange-backoffice-ui/src/handlers/useField.ts | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/packages/exchange-backoffice-ui/src/handlers/useField.ts b/packages/exchange-backoffice-ui/src/handlers/useField.ts index 3be397314..94635646f 100644 --- a/packages/exchange-backoffice-ui/src/handlers/useField.ts +++ b/packages/exchange-backoffice-ui/src/handlers/useField.ts @@ -12,7 +12,9 @@ export interface InputFieldHandler<Type> { isDirty: boolean; } -export function useField<T>(name: keyof T): InputFieldHandler<T[keyof T]> { +export function useField<T extends object, K extends keyof T>( + name: K, +): InputFieldHandler<T[K]> { const { initialValue, value: formValue, @@ -78,3 +80,28 @@ function setValueDeeper(object: any, names: string[], value: any): any { } return { ...object, [head]: setValueDeeper(object[head] ?? {}, rest, value) }; } + +type TTT<T extends object, K extends keyof T, R> = K extends keyof T + ? R extends T[K] + ? number + : never + : never; + +function impl<T extends object, K extends keyof T, R extends T[K]>( + obj: T, + name: K, +): T[K] { + return obj[name]; +} + +interface Pepe { + name: string; + when: Date; + size: number; +} +const p: Pepe = { + name: "n", + when: new Date(), + size: 1, +}; +const a = impl(p, "size"); |