typescript 算术运算的右侧必须是“any”、“number”或枚举类型

xoshrz7s  于 2023-04-22  发布在  TypeScript
关注(0)|答案(3)|浏览(267)

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

有什么想法吗

jdzmm42g

jdzmm42g1#

问题
(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))将不起作用,因为-将不作为算术转换而作为减法工作,因此保留了类型错误。

hpxqektj

hpxqektj2#

我得到这个错误是因为我使用Typescript并将变量标记为Number而不是number
哎呀!Typescript文档没有提到不要使用Number
https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#the-primitives-string-number-and-boolean
我打开了一个问题https://github.com/microsoft/TypeScript/issues/45460

9fkzdhlc

9fkzdhlc3#

insights = [
    {
        "title": "The Transportation KPIs You Should Be Tracking",
        "publishedDate": "2022-07-01T00:00:00.000Z"
    },
    {
        "title": "Morey's Piers and Water Parks Makes a Splash with Aptean TabWare EAM",
        "publishedDate": "2022-06-23T00:00:00.000Z",
    }]

insights = insights.sort((a: Insight, b: Insight) =>
          a.publishedDate > b.publishedDate ? -1 : 1
        );
console.log(insights);

使用布尔值作为true或false

相关问题