【问题标题】:Typescript: Use Boolean type in an arithmetic operation打字稿:在算术运算中使用布尔类型
【发布时间】:2018-06-20 21:19:28
【问题描述】:

我想在 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 是关于强制类型的。在运行时,您的布尔值无论如何都会被转换为数字,那么为什么不将布尔值显式转换为数字呢?
  • 请注意,您也可以通过使用 conditional operator 来解决此问题,例如let amount: number = user.hasFoo ? BASE + FOO_FACTOR : BASE;let amount: number = BASE + (user.hasFoo ? FOO_FACTOR : 0);

标签: typescript types


【解决方案1】:

TypeScript 希望您在编译时强制执行类型。由于 vanilla JavaScript 的内部弱类型化,您的代码可以在运行时运行。

避免any 转换,而是将boolean 转换为实际的number

有多种选择,例如:

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

或:

let number: number = Number(user.hasFoo)

【讨论】:

  • 谢谢。我将在我的函数中使用 Number()。
猜你喜欢
  • 1970-01-01
  • 2020-10-28
  • 2022-07-21
  • 1970-01-01
  • 2022-10-14
  • 1970-01-01
  • 1970-01-01
  • 2021-08-23
  • 1970-01-01
相关资源
最近更新 更多