summaryrefslogtreecommitdiff
path: root/packages/exchange-backoffice-ui/src/handlers/useField.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/exchange-backoffice-ui/src/handlers/useField.ts')
-rw-r--r--packages/exchange-backoffice-ui/src/handlers/useField.ts29
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");