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

时间:2017-04-28 19:52:42

标签: javascript typescript typecast-operator

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

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

编译时出错

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

然后我尝试使用any类型:

let action: string = actions[<number> <any> isPlay];

也出错了。我怎样才能重写这些代码。

2 个答案:

答案 0 :(得分:21)

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

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

let action: string = actions[isPlay ? 1 : 0];
let action: string = actions[+isPlay];
let action: string = actions[Number(isPlay)];

编译器和运行时都应该没问题。

答案 1 :(得分:1)

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

const action: string = actions[+!!isPlay]

例如,当您要保留三个条件中的至少两个,或者恰好一个条件要保留时,这会很有用:

const ok = (+!!something)  + (+!!somethingelse) + (+!!thirdthing) > 1
const ok = (+!!something)  + (+!!somethingelse) + (+!!thirdthing) === 1