javascript - 算术运算的右侧必须是“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));
}
}
有任何想法吗?
解决方案
问题
(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))
将不起作用,因为-
不会用作算术转换而是减法,因此会保持类型错误。
推荐阅读
- python - 忽略迁移中的 Django 模型字段
- python - 我怎样才能制作多人游戏变量,所以当有人添加一个时,每个人的屏幕都会显示变量(+1)?
- c# - Xamarin.Forms 服务返回列表
加上状态码 - javascript - 字段无法识别的文档变量。Acrobat Pro
- python - 处理来自 regressor_OLS.pvalues 的 Python IndexError
- react-native - React 本机 npm 包不适用于导出样式
- numpy - 如何获得 (k - 1)-numpy.arange(k) 的组合
- python - 基于Python中其他行的最大值返回行平均值
- node.js - 由于响应格式错误,tableau 扩展服务器无法响应
- javascript - 如何在反应子组件中保留 CSS 过渡