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

时间:2020-12-27 12:40:05

标签: typescript expression type-inference

为什么这些片段之一给出了 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;
  }

1 个答案:

答案 0 :(得分:2)

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