我在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));
}
}
有什么想法吗
3条答案
按热度按时间jdzmm42g1#
问题
(a > b)
和(b > a)
都返回boolean
,而且((a > b))
有太多的括号。要解决这个问题,必须将两个
boolean
结果都转换为number
。这可以通过以下3种方法之一实现:解决方案(使用方法#1):
注意事项:
使用
(+(a > b) - (b > a))
将不起作用,因为-
将不作为算术转换而作为减法工作,因此保留了类型错误。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
9fkzdhlc3#
使用布尔值作为true或false