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

Assigning boolean to number with || operator - strange behaviour

根据打字稿类型系统,无法分配给 .

但是,在了解 Javascript 的一些背景知识后,我尝试了下一批代码,但结果对我来说相当不清楚:

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 并将操作数的顺序替换为“||”来进行更多调整操作员。如果有人可以根据上述示例解释此类行为,我将不胜感激。

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

let booleanVariable: boolean = false;

您似乎无法通过将鼠标悬停在 playground 或 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总是returnsbooleanVariable。因此,TypeScript 推断表达式的类型是 booleanVariable:

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