为什么打字稿不能推断表达式的类型

why typescript can not infer type of expression

为什么这些片段中有一个给出了 TSC 错误而另一个没有给出? 它们都产生相同的结果。 nameParts 是一个字符串数组。

  if(nameParts[nameParts.length-1]){

    //error: Type 'string | undefined' is not assignable to type 'string'.
    //   Type 'undefined' is not assignable to type 'string'.
    const lastName:string = nameParts[nameParts.length-1];

  }



  const lastWord = nameParts[nameParts.length-1];
  if(lastWord){
    const lastName:string = lastWord;
  }

TypeScript 在分析深度上存在实用限制。使用 const 声明,很容易看出 lastWord 不会是 undefined,但如果没有它,TypeScript 将需要记住它在 nameParts[nameParts.length-1] 上看到了守卫,并且没有可能改变 nameParts[nameParts.length-1] 的中间代码(通过分配给它,使用 pop,使用 shift,等等)。为了避免让编译器太复杂 and/or 太慢,它只是在分析中没有走那么远——尤其是因为如果你想要它,你可以使用你的第二种方法 const