Typescript分配一个空字符串而不是布尔值

sai*_*sez 3 typescript

鉴于此打字稿(2.7.2)界面:

export interface A {
  b?: string;
  c?: boolean;
}
Run Code Online (Sandbox Code Playgroud)

这将按预期打印布尔值'false':

let a: A = {b: ''};
if (a.b && a.b.length > 0) {
  a.c = true;
} else {
  a.c = false;
}
console.log(a.c);
Run Code Online (Sandbox Code Playgroud)

但是,这会打印一个空的''字符串:

let a: A = {b: ''};
a.c = a.b && a.b.length > 0;
console.log(a.c);
Run Code Online (Sandbox Code Playgroud)

我在这里有点困惑.第二个例子应该像第一个例子一样,对吧?我错过了什么?

Anu*_*thi 6

a.b && a.b.length > 0这相当于"" && false因为空字符串评估falsy.表达式"" && false评估为"".这就是为什么a.c"".

像这样重构它,

a.c = a.b && a.b.length > 0 ? true : false
Run Code Online (Sandbox Code Playgroud)