TypeScript:在算术运算中使用布尔类型

3
我想在TypeScript中的算术运算中使用一个布尔变量,但编译器出现错误:“算术运算的右侧必须是类型为“ any”,“ number”或枚举类型。”
class User {
    hasFoo: boolean;
};
let user = new User();
let amount : number = BASE + FOO_FACTOR * user.hasFoo

我知道可以将布尔型转换为类型为 <any> 的变量并且它可以正常工作:
let amount : number = BASE + FOO_FACTOR * <any>user.hasFoo

但这是最好的解决方案吗?

为什么要在算术运算中使用布尔变量?TypeScript 是关于强制类型的。在运行时,您的布尔值将被转换为数字,那么为什么不明确地将布尔值转换为数字呢? - k0pernikus
1
可能是TypeScript中如何将布尔值转换为数字,例如0或1的重复问题。 - k0pernikus
请注意,您也可以通过使用条件运算符来解决此问题,例如 let amount: number = user.hasFoo ? BASE + FOO_FACTOR : BASE;let amount: number = BASE + (user.hasFoo ? FOO_FACTOR : 0); - Søren D. Ptæus
1个回答

5

TypeScript希望你在编译时强制执行类型。由于原生JavaScript的内部弱类型,你的代码可以在运行时正常工作。

避免使用any类型转换,而是将boolean转换为实际的number

有多种选项,例如:

let number: number = user.hasFoo ? 1 : 0

或者:

let number: number = Number(user.hasFoo)

谢谢。我会在我的函数中使用Number()。 - juminet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接