在TypeScript中,如何将布尔值转换为数字,如0或1

a2h*_*uen 10 javascript typecast-operator typescript

我们知道,类型转换在TypeScript中称为断言类型.以下代码部分:

// the variable will change to true at onetime
let isPlay: boolean = false;
let actions: string[] = ['stop', 'play'];
let action: string = actions[<number> isPlay];
Run Code Online (Sandbox Code Playgroud)

在编译时,它会出错

Error:(56, 35) TS2352: Neither type 'boolean' nor type 'number' is assignable to the other.
Run Code Online (Sandbox Code Playgroud)

然后我尝试使用any类型:

let action: string = actions[<number> <any> isPlay];
Run Code Online (Sandbox Code Playgroud)

也出问题了.我该如何重写这些代码.

Nit*_*mer 28

你不能只是转换它,问题是在运行时不仅在编译时.

你有几种方法可以做到这一点:

let action: string = actions[isPlay ? 1 : 0];
let action: string = actions[+isPlay];
let action: string = actions[Number(isPlay)];
Run Code Online (Sandbox Code Playgroud)

这些应该适用于编译器和运行时.

  • 第二种方式并不是真正的自我记录,除非你知道你可以这样做.否则,对于查看代码的任何其他开发人员来说,第一种方式非常明显. (2认同)

use*_*558 6

您可以使用以下命令将任何内容转换为布尔值,然后转换为数字+!!

const action: string = actions[+!!isPlay]
Run Code Online (Sandbox Code Playgroud)

例如,当您希望至少满足三个条件中的两个,或者正好满足一个条件时,这会很有用:

const ok = (+!!something)  + (+!!somethingelse) + (+!!thirdthing) > 1
const ok = (+!!something)  + (+!!somethingelse) + (+!!thirdthing) === 1
Run Code Online (Sandbox Code Playgroud)

  • `+undefined` 是 NaN,但 `+!!undefined` 为零。 (4认同)
  • @马克洛佩兹!强制表达式为 true 或 false,所以 +!! 变成 0 或 1。例如,如果 `something` 是 4,那么 +!!4 就是 1,而 +4 就是 4。所以 +!! 帮助您计算布尔真表达式的数量。 (3认同)