typescript :对象可能是 'undefined' 但仅适用于 '<' 和 '>' 运算符

标签 typescript

我一直有一个很奇怪的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/

相关文章:

typescript - 没有完整命名空间的类型引用

typescript - 如何在 TypeScript 中将参数的默认值设置为空数组?

javascript - Angular mat-select 在移动或低宽度设备上无法正确显示选项

javascript - 无法将 userNm 的属性设置为未定义

javascript - 无法在 typescript 中扩展angularjs Controller

javascript - 将 [op.and] 添加到 Sequelize 查询对象

javascript - 如何使用 Angular Material 的 $mddialog 服务中的 typescript 在 IDialogOptions 中设置解析签名

javascript - 使用 TypeScript 编译类的观察

html - Angular2设置输入字段的最小值和最大值

javascript - 在 Create-React-App 中输入具有解构赋值参数的函数时出现意外标记