我有一個看起來像這樣的型別:
type MessageTypes = {
foo: { bar: string };
baz: { qux: string, quux: string };
corge: { grault: number };
};
我想定義一個給我類似的型別:
| {
op: 'foo';
data: { bar: string };
}
| {
op: 'baz';
data: { qux: string, quux: string };
}
| {
op: 'corge';
data: { grault: number };
}
到目前為止,我最接近的是:
type KnownMessage = {
[T in keyof MessageTypes]: { op: T; data: MessageTypes[T] };
};
但是,我不關心這種型別的鍵,只關心值。
使用 定義我的特殊聯合型別的最佳方法是什么MessageTypes?
uj5u.com熱心網友回復:
很接近; 只需得到所有值的聯合,如下所示:
type KnownMessage = {
[T in keyof MessageTypes]: { op: T; data: MessageTypes[T] };
}[keyof MessageTypes];
它之所以有效,是因為:
{
foo: 1,
bar: 2,
}["foo" | "bar"]
導致值1和2=>的聯合1 | 2
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/468684.html
上一篇:縮小映射函式的泛型型別
下一篇:從axios函式獲取回應
