【问题标题】:TS2554: Expected X arguments, but got Y w/ function overloadingTS2554:预期 X 参数,但得到 Y w/函数重载
【发布时间】:2020-03-25 10:49:49
【问题描述】:

首先,我的功能:

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. 或者这是“按设计”,我根本不应该创建模棱两可的重载?

【问题讨论】:

    标签: typescript


    【解决方案1】:

    当您有重载签名时,实际函数定义的签名是“实现签名”,这不算作重载签名。如果你想让它成为一个重载签名,你必须写两次。请参阅handbook

    【讨论】:

      【解决方案2】:
      const fn=(...rest:any){
       console.log(arguments)
      }
      
      fn(1);
      fn(1,2);
      fn('a',1,1);
      

      如果你想超载,试试这个。

      【讨论】:

      • 你错过了问题的重点......而且你根本没有使用重载?
      猜你喜欢
      • 2020-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-29
      • 2021-08-22
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      相关资源
      最近更新 更多