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

Cal*_*son 4 javascript boolean typescript optional-chaining

我有一个正在访问的响应: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;
Run Code Online (Sandbox Code Playgroud)

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

jca*_*alz 11

可选链最终将产生一个价值data?.currentOrganization?.onboardingSteps?.length这大概是一个number,如果一切链是不是null还是undefined....但如果链中的任何事情都是nullish,那么输出将是undefined自己。如果undefined > 0没有 Typescript 抱怨,您就无法进行测试。

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

const hasSteps = (data?.currentOrganization?.onboardingSteps?.length ?? 0) > 0;
Run Code Online (Sandbox Code Playgroud)

这是使用nullish聚结以产生0如果可选的链端部undefined

Playground 链接到代码

  • `undefined > 0` 是在任何 JavaScript 引擎上产生 `false` 的有效表达式。目前还不清楚为什么它在 TypeScript 中失败。 (3认同)