当执行算术运算时,Typescript对字符串的类型发誓
我有当执行算术运算时,Typescript对字符串的类型发誓,typescript,Typescript,我有count变量,他可以选择number和string类型。 我给他分配了一个类型count:number | string。 在我的一个地方,当我执行算术运算时,例如count*5`。我得到一个类型错误 The right-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type. 如何更正确地修复此错误 毕竟,我知道count的类型不是any,他的类型是st
count
变量,他可以选择number
和string
类型。
我给他分配了一个类型count:number | string
。
在我的一个地方,当我执行算术运算时,例如
count*5`。我得到一个类型错误
The right-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type.
如何更正确地修复此错误
毕竟,我知道count
的类型不是any
,他的类型是string
和namber
或者同样,给他分配
any
?计数的类型是number | string
。它告诉编译器该值可以是数字或字符串。因此,在进行算术运算时,它会抛出一个错误
试试这个
if(parseInt(count)) { // to check if output is not NAN
parseInt(count) * 5;
}
count
的类型是number | string
。它告诉编译器该值可以是数字或字符串。因此,在进行算术运算时,它会抛出一个错误
试试这个
if(parseInt(count)) { // to check if output is not NAN
parseInt(count) * 5;
}
TS正确地显示了类型错误,因为
*
是二进制运算符,需要在左侧和右侧有数字
类型。这就是raw JS之间的区别,它的这个操作符的行为很弱,并且允许在不同的类型上使用*
。TS正在修复此行为以消除此类错误,因为没有人希望对字符串或对象进行乘法
我们可以说TS强类型*
运算符仅用于数字
类型(任何
也被允许,但这是不安全JS行为的回退)。为了让TS开心,我们可以做两件事:
-通过parseFloat
或parseInt
-仅对数字
类型执行条件乘法
// parsing string to number
return (typeof count === 'number' ? count : parseInt(count)) * 2;
// conditional multiplication
return typeof count === 'number' ? count * 2 : count;
在这两种解决方案中,我们只使用
数字
进行乘法。在这里,带有行为的链接正确地显示了类型错误,因为*
是一个二进制运算符,需要在左侧和右侧分别显示编号类型。这就是raw JS之间的区别,它的这个操作符的行为很弱,并且允许在不同的类型上使用*
。TS正在修复此行为以消除此类错误,因为没有人希望对字符串或对象进行乘法
我们可以说TS强类型*
运算符仅用于数字
类型(任何
也被允许,但这是不安全JS行为的回退)。为了让TS开心,我们可以做两件事:
-通过parseFloat
或parseInt
-仅对数字
类型执行条件乘法
// parsing string to number
return (typeof count === 'number' ? count : parseInt(count)) * 2;
// conditional multiplication
return typeof count === 'number' ? count * 2 : count;
在这两种解决方案中,我们只使用数字
进行乘法。这里有一个指向的链接,其行为是number | string
表示它是一个数字或字符串,TS告诉您不能将字符串乘以5。您需要首先将其转换为数字,确保它不是字符串或任何有影响的东西。number | string
表示它是数字或字符串,TS告诉您不能将字符串乘以5。您需要首先将其转换为数字,确保它不是字符串或任何有影响的东西。如果count
为0
或“0”
,则此操作显然无效。如果count
为0
或“0”
,则此操作显然无效。