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 的推断类型。 那么,
false|A
A
我猜z2会被推断为
true|A
。它只是 TS 编译器(或游乐场)的错误还是规范定义的正确行为?