目录
The left-hand side of an arithmetic operation must be type ‘any’, ‘number’, ‘bigint’ or an enum type
算术运算的左侧必须是“any”、“number”、“bigint”类型或枚举类型
any
当您对不属于 、或类型的值进行算术运算时,number
例如enum
a Date
。
要解决错误,请将值转换为数字。
下面是错误如何发生的示例。
const date1 = new Date('2023-07-24'); const date2 = new Date('2023-07-23'); // ⛔️ Error: The left-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type.ts(2362) const result = date1 - date2;
当您从另一个 Date 对象(在 JavaScript 中)中减去一个 Date 对象时,它们都会隐式转换为一个数字,表示 1970 年 1 月 1 日到给定日期之间经过的毫秒数。
Date
对象在算术运算的左侧或右侧有效。 使用getTime()
减去Date时的方法
要解决该错误,请getTime()
在减去日期时调用该方法。
const date1 = new Date('2023-07-24'); const date2 = new Date('2023-07-23'); const result = date1.getTime() - date2.getTime(); console.log(result); // 👉️ 86400000
getTime
方法返回一个表示 Unix 纪元和给定日期之间的毫秒数的值。number
TypeScript 中算术运算的允许值
any
number
bigint
enum
如果您尝试在算术运算中使用任何其他类型(就像我们对
Date
对象所做的那样),则会导致该错误。
number
。 number
如果是预期类型,则将值转换为数字
如果在减去对象时没有出现错误Date
,请尝试将算术运算的左侧和右侧转换为数字。
const result = Number('5') - Number('3'); console.log(result); // 👉️ 2
该示例显示了我们必须如何将字符串转换为数字才能减去它们。
如果我们没有将字符串转换为数字,我们就会得到同样的错误。
// ⛔️ Error: The left-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type.ts(2362) const result = '5' - '3';
这是因为我们只能对
number
,any
或类型的值进行算术运算enum
。
算术运算的右侧必须是“any”、“number”、“bigint”或枚举类型
错误“算术运算的右侧必须是类型‘any’、‘number’、‘bigint’或枚举”当您进行算术运算时右侧不是类型 ,any
或number
,enum
例如一个string
。
要解决错误,请将右侧转换为数字。
下面是错误如何发生的示例。
// ⛔️ Error: The right-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type.ts(2363) const result = 5 - '3';
我们有一个算术运算,其中右侧的类型为string
。
然而,TypeScript 并不高兴,因为它不认为字符串是算术运算的有效左侧或右侧。
将右侧的值转换为数字
要解决该错误,请将右侧值转换为number
.
const result = 5 - Number('3'); console.log(result); // 👉️ 2
我们使用Number()
构造函数将字符串转换为数字。
any
number
bigint
enum
如果您尝试在算术运算中使用任何其他类型(例如Date
对象、string
、boolean
等),则会导致该错误。
解决使用日期时的错误
如果在减去对象时出现错误Date
,请通过调用内置getTime()
方法将它们转换为数字。
const date1 = new Date('2022-06-17'); const date2 = new Date('2022-06-16'); const result = date1.getTime() - date2.getTime(); console.log(result); // 👉️ 86400000
getTime
方法返回一个表示 Unix 纪元和给定日期之间的毫秒数的值。number
Date
对象进行减法,因为它们没有number
,any
或类型enum
,因此我们必须在算术运算之前将它们转换为数字。逻辑或 (||) 和逻辑与 (&&) 运算符
使用逻辑与 (&&) 运算符或逻辑或 (||) 运算符时经常会出现此错误。
// ⛔️ Error: The right-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type.ts(2363) const result = 4 - (false && 2);
运算符右侧的计算结果为,因此我们最终从 中false
减去,这导致了错误。false
4
由于布尔值不是算术运算的有效右侧,因此您必须确保右侧的值是number
.
额外资源
您可以通过查看以下教程来了解有关相关主题的更多信息: