用||将布尔值分配给数字运算符-奇怪的行为

时间:2019-06-03 14:11:26

标签: typescript types typescript-typings typing

根据打字稿类型系统,不能分配给。

但是,由于具有Java脚本的背景知识,我尝试了下一批代码,结果对我来说还不清楚:

let booleanVariable: boolean = false;
let numberVariable: number = booleanVariable || 1;
// compiles just fine > numberVariable = 1

如果我要更改'|| 1'至'|| 0',则发生编译器错误:

let booleanVariable: boolean = false;
let numberVariable: number = 0 || booleanVariable;
// type false is not assignable to number

如果我要将'booleanVariable'更改为'true',则会出现编译器错误:

let booleanVariable: boolean = true;
let numberVariable: number = booleanVariable|| 1;
// type true is not assignable to type number

通过将true更改为false并将操作数的顺序替换为'||',还可以进行更多调整。操作员。如果有人可以根据上述示例解释这种行为,我将不胜感激。

1 个答案:

答案 0 :(得分:2)

在下面的行中,booleanVariable的类型不是boolean,而是false

let booleanVariable: boolean = false;

似乎您无法通过在操场或IDE中悬停变量来查看真实类型。但是,如果您需要说服,可以这样做:

const booleanVariable: boolean = false ;
const tmp = booleanVariable; // Here the type of `tmp` is inferred as `false`

这里是如何将booleanVariable声明为真实的boolean

let booleanVariable = false as boolean;

现在,下一条指令是错误:

let numberVariable: number = booleanVariable || 1; // Error: Type 'true | 1' is not assignable to type 'number'.

在JavaScript 0falsy中,表达式0 || booleanVariable总是返回booleanVariable。因此,TypeScript推断表达式的类型是booleanVariable的类型:

let numberVariable: number = 0 || booleanVariable; // Error: Type 'boolean' is not assignable to type 'number'.