Typescript:用 && 或 || 推断的表达式类型

问题描述 投票:0回答:0

看看TS playground里的这个程序

class A {
}
function f(x:boolean) {
    let a=new A();
    let z1=x && a; // z1: false | A
    let z2=x || a; // z2: A    ( not "true | A")
    console.log(z1,z2);    
}
f(true);//  A:{} , true
f(false);// false, A: {}

我通过将鼠标光标悬停在 z1 和 z2 上来检查 z1 和 z2 的推断类型。 那么,

  • z1 被推断为
    false|A
  • z2 被推断为
    A

我猜z2会被推断为

true|A
。它只是 TS 编译器(或游乐场)的错误还是规范定义的正确行为?

typescript types type-inference
© www.soinside.com 2019 - 2024. All rights reserved.