TS2554:需要X参数,但Y带有函数重载

时间:2018-08-01 21:59:52

标签: typescript

首先,我的功能:

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 ,这是第二个重载所建议的。

所以我的问题是:

  1. 有没有办法使这项工作有效?我做错什么了吗?
  2. 或者这是“按设计的”,我根本不应该创建模棱两可的重载?

2 个答案:

答案 0 :(得分:6)

当具有重载签名时,实际函数定义的签名为“实现签名”,它不算作重载签名。如果要使其成为过载签名,则必须将其写入两次。参见handbook

答案 1 :(得分:0)

const fn=(...rest:any){
 console.log(arguments)
}

fn(1);
fn(1,2);
fn('a',1,1);

如果要过载,请尝试此操作。