算术运算的右侧必须为“ any”,“ number”或枚举类型

时间:2018-07-26 12:44:41

标签: javascript typescript

我在JS中有这段代码,我需要使其在TypeScript中工作。
它一直在说:

  

算术运算的右侧必须为“ any”,“ number”或枚举类型

sort(field, reverse, primer) {  
    var key = primer ? 
    function(x) {return primer(x[field])} : 
    function(x) {return x[field]};

    reverse = [-1, 1][+!!reverse];

    return function (a, b) {
        return a = key(a), b = key(b), reverse * ((a > b)) - (b > a));
    } 
}

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

问题

(a > b)(b > a)都返回boolean,另外((a > b))的括号太多。

要解决此问题,必须将两个boolean结果都转换为number。 这可以通过以下三种方法之一来实现:

1. +bool
2. bool ? 1 : 0
3. Number(bool)

解决方案(使用方法1):

sort(field, reverse, primer) {  
    var key = primer ? 
    function(x) {return primer(x[field])} : 
    function(x) {return x[field]};

    reverse = [-1, 1][+!!reverse];

    return function (a, b) {
        return a = key(a), b = key(b), reverse * (+(a > b) - +(b > a));
    } 
}

注意:

使用(+(a > b) - (b > a))不起作用,因为-不能作为算术转换而是减法,因此会保持类型错误。