首页 > 解决方案 > 打字稿:对象可能是“未定义”,但仅适用于“<”和“>”运算符

问题描述

我一直有一个非常奇怪的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。

标签: typescript

解决方案


整个左侧将评估undefined是否可选链接失败。在这种情况下,您的代码如下:

if (undefined < 10)

这没有意义,因此 TypeScript 引发了错误。

使用===不是问题,因为检查一个值是否为to===并不是没有意义的。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) {

取决于你想要的逻辑。


推荐阅读