Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当执行算术运算时,Typescript对字符串的类型发誓_Typescript - Fatal编程技术网

当执行算术运算时,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”
,则此操作显然无效。