具有固定属性名的给定类型定义,如
type Animals =
| {
key: 'dog';
value: { woof: string };
}
| {
key: 'cat';
value: { meow: number };
}
我如何构造一个函数参数,以保证在编译时只向一个类型传递正确的参数?我想像这样调用我的函数:
fn('dog', { woof: 'woof' });
fn('cat', { meow: 'meow' });
但在编译时以下操作将失败
fn('dog', { meow: 'meow' });
fn('cat', { woof: 'woof' });
我尝试了const fn = <T extends Animals>(key: T['key'], value: Extract<T, { key: T['key'] }>['value']) => ...
,但是值类型仍然是联合类型{ woof: string } | { meow: number }
,而不是基于键参数的独占{ woof: string }
或{ meow: number }
。
1条答案
按热度按时间hc2pp10m1#
找到办法了!公平地说我不确定这是否可行!
看看这个Playground。