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