我一直有一个很奇怪的Object is possibly 'undefined'
错误。我的目标是这样的条件:
if (productPages?.length && productPages[productPages.length - 1].docs?.length < 10){...}
但是条件productPages[productPages.length - 1].docs?.length < 10
导致我出现错误Object is possibly 'undefined'
.
问题是如果我更改 <
另一个运算符,例如 ==
或 ===
错误消失了,在我看来,这很奇怪。
我不想使用 ! - Non-null assertion operator
,但我找不到任何其他解决方案。
测试的 Typescript 版本:3.7.3 和 4.0.5。
最佳答案
如果可选链接失败,整个左侧将评估为 undefined
。在这种情况下,您的代码如下:
if (undefined < 10)
这没有意义,因此 TypeScript 会引发错误。
使用 ===
不是问题,因为检查值是否为 ===
到 undefined
是 不是荒谬的。
如果 docs
肯定存在,则从中删除可选链:.docs.length
。但是由于您不知道 productPages[productPages.length - 1]
是否存在,因此您还需要一个可选链。 (您的 ?.
可能放错地方了。)
如果您不知道 docs
是否存在,您需要弄清楚您想要的逻辑:如果嵌套数组不存在,您是否要运行代码找到,还是仅在找到嵌套数组时才运行代码?更改为:
const length = productPages[productPages.length - 1]?.docs?.length;
if (length !== undefined && length < 10) {
// or
// if (length === undefined || length < 10) {
取决于你想要的逻辑。
关于 typescript :对象可能是 'undefined' 但仅适用于 '<' 和 '>' 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64825814/