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

目录

The left-hand side of an arithmetic operation must be type ‘any’, ‘number’, ‘bigint’ or an enum type

  1. 算术运算的左侧必须是“any”、“number”、“bigint”类型或枚举类型
  2. 算术运算的右侧必须是“any”、“number”、“bigint”类型或枚举类型

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

any当您对不属于 、或类型的值进行算术运算时,number例如enuma Date

要解决错误,请将值转换为数字。

下面是错误如何发生的示例。

索引.ts
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 日到给定日期之间经过的毫秒数。

然而,TypeScript 并不高兴,因为它不认为Date 对象在算术运算的左侧或右侧有效。

使用getTime()减去Date时的方法

要解决该错误,请getTime()在减去日期时调用该方法。

索引.ts
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 中算术运算的允许值

TypeScript 只允许我们对、类型的值进行算术运算 anynumberbigint enum

如果您尝试在算术运算中使用任何其他类型(就像我们对
Date
对象所做的那样),则会导致该错误。

解决该错误的唯一方法是确保算术运算左侧和右侧的值属于上述类型 – 最有可能number

number如果是预期类型,则将值转换为数字

如果在减去对象时没有出现错误Date,请尝试将算术运算的左侧和右侧转换为数字。

索引.ts
const result = Number('5') - Number('3'); console.log(result); // 👉️ 2

该示例显示了我们必须如何将字符串转换为数字才能减去它们。

如果我们没有将字符串转换为数字,我们就会得到同样的错误。

索引.ts
// ⛔️ 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’或枚举”当您进行算术运算时右侧不是类型 ,anynumber,enum例如一个string

要解决错误,请将右侧转换为数字。

下面是错误如何发生的示例。

索引.ts
// ⛔️ 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.

索引.ts
const result = 5 - Number('3'); console.log(result); // 👉️ 2

我们使用Number()构造函数将字符串转换为数字。

TypeScript 只允许我们对、类型的值进行算术运算 anynumberbigint enum

如果您尝试在算术运算中使用任何其他类型(例如Date对象、stringboolean等),则会导致该错误。

解决使用日期时的错误

如果在减去对象时出现错误Date,请通过调用内置getTime()方法将它们转换为数字。

索引.ts
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

TypeScript 不允许我们对Date对象进行减法,因为它们没有number,any或类型enum,因此我们必须在算术运算之前将它们转换为数字。

逻辑或 (||) 和逻辑与 (&&) 运算符

使用逻辑与 (&&) 运算符或逻辑或 (||) 运算符时经常会出现此错误。

索引.ts
// ⛔️ 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减去,这导致了错误。false4

由于布尔值不是算术运算的有效右侧,因此您必须确保右侧的值是number.

额外资源

您可以通过查看以下教程来了解有关相关主题的更多信息: