繁体   English   中英

打字稿:基于函数返回类型的错误重载选择

[英]Typescript: Wrong overload selection based on function return type

为什么以下代码是编译错误:

export interface Timer { }
declare function setInterval(callback: (...args: any[]) => void, ms: number, ...args: any[]): Timer;
declare function setInterval(handler: (...args: any[]) => void, timeout: number): number;

const timer: number = setInterval(() => console.log('hi'), 1000);

另外,当我更改declare function语句的顺序时,它会编译代码而不会出现任何错误。 看起来编译器只接受第一个类型声明。

编辑:我无法提供到游乐场的链接,因为该URL在问题中的格式不正确,并且我无法使用任何URL缩短器!

问题在于,在解决函数签名时,Typescript通常不会考虑预期的调用站点返回类型。 在您的情况下,只需查看setInterval(() => console.log('hi'), 1000); 编译器可以说此调用可以解析为任何一个签名,因此它按声明顺序(如编译器规范中所指定)选择第一个签名。 一旦选择了重载,编译器就不会在以后发生错误时撤消该决定。

对我而言,真正的问题似乎是,甚至在我看来,也要看一下setInterval(() => console.log('hi'), 1000); 无法判断是否返回numberTimer 没有什么区别,有两个参数的调用返回一个数字,有两个参数的版本调用与一个空的rest参数返回一个Timer

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM