[英]Generic type where one field type is constraint by key name specified in second field
假設我有這種類型
type Form = {
enabled: true;
name: string;
};
我想制作另一種表示特定字段的更改事件的泛型類型
type ChangeEvent<T> = {
field: keyof T;
value: T[keyof T];
};
上面的例子沒有正確約束value
const e: ChangeEvent<Form> = {
field: "enabled",
value: "false", // accepts boolean or string
}
我知道映射類型
type ChangeEvent<T> = {
[K in keyof T]: T[K];
}
但我想知道如何將它與單獨的value
字段一起使用。
我也不想指定第二個通用參數,例如
type ChangeEvent<T, K extends keyof T> = {
field: K;
value: T[K];
}
如何修復ChangeEvent
的第一個版本?
如果我錯了並且這不是公認的答案,我會很高興,但是我很確定您目前可以做的絕對最好的事情是:
type KChangeEvent<T, K extends keyof T = keyof T> = {
field: K;
value: T[K];
}
export type ChangeEvent<T> = KChangeEvent<T>
因此它在技術上具有第二個類型參數,但導出的類型關閉了keyof T
默認值。
但最終,必須命名K
,因為這是讓 TypeScript 在多個位置約束同一類型的唯一方法。 keyof T
沒有削減它,因為每個引用都可能是不同的類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.