下面是我的代码块,如果说 Object 可能未定义,打字稿将在第二个代码块上抛出错误,在这种情况下,打字稿不应该假设它为 falsea 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+GAB8Y1RPgBmSMPgSMmSJQAp4yVOACUMAN7MYMQmRgBtAIwAaAEyOAzI4AsAXU0BfZm ZtHUIAfgA6AjAAcygACxhpAAYTcyZLAHoMmaAAJQgA3fBgIEBEi0AR8Zj8gA
或者我们正在尝试做一个undefined > 0
与数字的未定义比较,这就是它抛出错误的原因?
或者我们正在尝试对数字进行 undefined > 0 undefined 比较,这就是它抛出错误的原因?
就是这样。有关导致完全相同错误的另一个示例,请参阅:
const undef = void 0;
if (undef > 0) {
// Have some code
}
与你无关Array<number> | undefined
特别是可选链接 - TypeScript 不会让您将可能未定义的内容与数字进行比较,因为比较没有多大意义。在这种情况下,如果数组未定义,您会期望
if (a?.length > 0) {
实现还是不实现?或者你不完全确定?如果您不确定(许多人可能不会先运行代码来查看其结果),这就是此 TypeScript 错误背后的要点 - 代码令人困惑,因此 TS 会提示您修复它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)