繁体   English   中英

为什么 typescript 会在一个数字上抛出错误 | 未定义的比较,即使在使用可选链接之后?

[英]Why does typescript throw an error on an number | undefined comparison, even after using optional chaining?

下面是我的代码块,如果说 Object 可能是未定义的,那么 typescript 将在第二个抛出错误,在这种情况下,不应该 typescript 只是假设a is undefined错误时抛出错误?

const condition = true; // can be a condition that could be either true or false
const a: Array<number> | undefined;
if(condition) {
    a = [1,2,3,4,5];
}

if(a?.length > 0){
   // Have some code
}
   

这是指向代码块和引发错误的链接。 https://www.typescriptlang.org/play?#code/MYewdgzgLgBKYBMCWUngFwCMQgDYFMBDMGAXhigCcBXfAbgFgAoA2Q9GAQUssIE8APGGoBbTPkoA+GAB8Y1RPgBmSMPgSMmSJQAp4yVOACUMAN7MYMQmRgBtAIwAaAEyOAzI4AsAXU0BfZmZtHUIAfgA6AjAAcygACxhpAAYTcyZLAHoMmAAJQgA3fBgIEBEi0AR8Zj8gA

或者我们正在尝试对一个数字进行undefined > 0 undefined 比较,这就是它引发错误的原因?

或者我们正在尝试对一个数字进行 undefined > 0 undefined 比较,这就是它引发错误的原因?

就是这样。 有关导致完全相同错误的另一个示例,请参见:

const undef = void 0;
if (undef > 0) {
  // Have some code
}

与您的Array<number> | undefined无关特别是Array<number> | undefined或可选链接 - 这是 TypeScript 不会让您将可能未定义的内容与数字进行比较,因为比较没有多大意义。 在这种情况下,如果未定义数组,您会期望

if (a?.length > 0) {

实现还是不实现? 或者你不完全确定? 如果您不确定,因为许多人可能不会先运行代码来查看它的结果,这就是 TypeScript 错误背后的要点 - 代码令人困惑,因此 TS 提示您修复它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM