【问题标题】:error TS2345: Argument of type '(a: Test, b: Test) => boolean | 1' is not assignable to parameter of type '(a: Test, b: Test) => number'错误 TS2345:类型参数 '(a: Test, b: Test) => boolean | 1' 不可分配给类型为“(a:测试,b:测试)=> 数字”的参数
【发布时间】:2018-01-18 19:06:55
【问题描述】:

抱歉,主题太长了,我只是不明白回复。

我的代码:

this.rezerwacjeFilteredByseaarchInput.sort(function (a, b) {
      if (a[5]===null) {
       // console.log(a[5]);
        return 1;

      }
        if (firmaSortOrder) {
          return a[5] > b[5];
        }
        else {
          return b[5] > a[5];
        }

    });

js 抛出: 错误 TS2345: 类型参数 '(a: Rezerwacja, b: Rezerwacja) => boolean | 1' 不可分配给类型为 '(a: Rezerwacja, b: Rezerwacja) => number' 的参数。 输入'布尔| 1' 不可分配给类型“数字”。 类型 'true' 不能分配给类型 'number'。

【问题讨论】:

  • 返回 a[5] - b[5] 和 b[5] - a[5]

标签: javascript typescript


【解决方案1】:

根据MDN description of sort function,排序比较函数必须返回一个数字。您的第一个条件返回数字,但其他两个返回布尔值。下面的代码应该可以工作。

this.rezerwacjeFilteredByseaarchInput.sort(function (a, b) {
    if (a[5] === null) {
        return 1;
    }
    if (firmaSortOrder) {
        return a[5] - b[5];
    }
    return b[5] - a[5];
});

【讨论】:

    【解决方案2】:

    这是一个打字稿编译错误。 rezerwacjeFilteredByseaarchInput 中的签名不正确。它应该只返回数字值(这就是消息所说的),但在它的正文中你可以读到它可以返回布尔值。

    【讨论】:

    • “它应该只返回布尔值”消息是相反的。 Comparator 应该总是返回一个数字,因为您不能用布尔标志表示 3 种可能的比较结果。
    • 你是完全正确的。我误读了错误消息并编辑了我的答案。比较器函数必须只返回数字(出于您引用的原因),但通过返回比较结果,它返回不正确的布尔值并引发打字稿编译错误
    猜你喜欢
    • 2021-08-25
    • 1970-01-01
    • 2018-08-10
    • 2021-05-15
    • 2017-02-12
    • 1970-01-01
    • 2018-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多