javascript - 算术运算的右侧必须是类型 'any' 、 'number' 或枚举类型

标签 javascript typescript

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

The right hand side of an arithmetic operation must be of type 'any', 'number' or an enum type

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) 都返回 boolean 并且还返回 ((a > b)) 括号太多了。

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

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)) 是行不通的,因为 - 不是算术转换而是减法,因此保持类型错误。

关于javascript - 算术运算的右侧必须是类型 'any' 、 'number' 或枚举类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51539159/

相关文章:

javascript - 在击键时使用 Shiny 中的 javascript 更新 radioButtons

javascript - 将原型(prototype)与 "Namespace"用于现有对象

typescript - 缺少无效分配的 TSC 警告

javascript - TypeScript 报告对象可能是 'undefined' 而它不应该

javascript - Chart.js 图例位置错误

reactjs - 获取断点以使用 jest、Visual Studio 代码和自定义 typescript 转换器

javascript - 异步函数 javascript 没有在后台运行?

javascript - 动态构建函数

javascript - 在 Javascript 的构造函数中访问不是使用 'this' 关键字创建的变量

css - 带左/右箭头的 slider