我在 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/