首页 > 解决方案 > 算术运算的右侧必须是“any”、“number”或枚举类型

问题描述

我在 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));
    } 
}

有任何想法吗?

标签: javascripttypescript

解决方案


问题

(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));
    } 
}

笔记:

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


推荐阅读