首先,我的功能:
function randIntIncl(max: number): number;
function randIntIncl(min: number, max?: number): number {
if(max === undefined) {
max = min;
min = 0;
}
return Math.floor(Math.random() * (max - min + 1)) + min; //The maximum is inclusive and the minimum is inclusive
}
(信用MDN)
称呼为:
randIntIncl(1,9999)
我得到了错误:
TS2554:应该有1个参数,但是有2个。
我正在猜测,TypeScript匹配第一个重载,然后出错。我不明白的是为什么它不尝试第二次过载? 9999
显然是数字,所以应该匹配,不是吗?
我可以简单地忽略第一个重载,并且一切都会正常进行,因为无论如何我都将max
设为可选,但是出于文档目的,我将重载放在了那里。当用一个arg调用时,该arg是 max 而不是 min ,这是第二个重载所建议的。
所以我的问题是:
答案 0 :(得分:6)
当具有重载签名时,实际函数定义的签名为“实现签名”,它不算作重载签名。如果要使其成为过载签名,则必须将其写入两次。参见handbook。
答案 1 :(得分:0)
const fn=(...rest:any){
console.log(arguments)
}
fn(1);
fn(1,2);
fn('a',1,1);
如果要过载,请尝试此操作。