微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

可选链接打字稿上的对象可能是“未定义”错误

如何解决可选链接打字稿上的对象可能是“未定义”错误

我正在访问一个响应:data?.currentOrganization?.onboardingSteps?。您可以猜到,data、currentOrganization 和 onboardingSteps 可能都为 null。我想按如下方式分配一个变量:

const hassteps = data?.currentOrganization?.onboardingSteps?.length > 0;

我认为如果任何字段为空或少于 1 个步骤,hasValue 将评估为 false。但是,我收到了 TypeScript 错误Object is possibly 'undefined'

这就是我目前解决它的方式:

const hassteps =
  data?.currentOrganization?.onboardingSteps != null &&
  data?.currentOrganization?.onboardingSteps?.length > 0;

这感觉不必要地冗长。有没有其他更优雅的解决方案?

解决方法

optional chain 最终会为 data?.currentOrganization?.onboardingSteps?.length 生成一个值,如果链中的所有内容都不是 numbernull,则该值可能是 undefined。 .. 但如果链中的任何内容都是无效的,那么输出将是 undefined 本身。如果没有 Typescript 抱怨,您就无法测试 undefined > 0

因此,您可能应该执行以下操作:

const hasSteps = (data?.currentOrganization?.onboardingSteps?.length ?? 0) > 0;

如果可选链以 0 结尾,则使用 nullish coalescing 生成 undefined

Playground link to code

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?