我有一个带有两个重载的函数,当我调用这个函数时,重载可以正常工作,但是在函数体中,第二个参数的类型并没有根据第一个参数的值来缩小。
function foo(event: 'one', value: string): void;
function foo(event: 'two', value: number): void;
function foo(event: 'one' | 'two', value: string | number): void {
event // 'one' | 'two'
value // string | number
if (event === 'one') {
event // 'one'
value // !!! string | number , Why not string??
} else {
event // 'two'
value // !!! string | number , Why not number??
}
}
当第一个参数为“一”时,是否可以具有value
-string
类型,当第一个参数为“二”时,是否可以具有number
类型?
1条答案
按热度按时间ctehm74n1#
是的,如果你在rest参数中使用一个元组的并集,并且在参数中直接解构元组,事实上,使用这个你甚至不再需要重载,元组并集将被表示为重载:
Playground链接
局限性:仅当元组联合是区分联合(您的是)时才有效。