检查组合链中的字段是否未定义

假设我们有以下声明:


interface Inf1 {

  field: boolean | undefined;

}


interface Inf2 {

  field: Inf1 | undefined

}


interface Inf3 {

  field: Inf2 | undefined

}


function fun1(): Inf3 | undefined {

  return {field: {field: {field: true}}};

}

我想检查是否fun1()等于true(或任何其他值)返回的对象中的第三嵌套字段。首先尝试是:


if (value.field.field.field) {

  console.log('This code does not compile because nested `field` objects may be undefined.');

}

是什么原因导致编译错误,因为field中间的可能是undefined。


我需要编译此代码的目的是检查所有嵌套对象是否不是undefined:


let value = fun1();

if (

  value &&

  value.field &&

  value.field.field &&

  value.field.field.field

  ) {

    console.log('This code is compiled successfully');

  }

有没有一种方法可以“即时”检查中间的那些“字段”是否未定义?


江户川乱折腾
浏览 167回答 1
1回答

守着一只汪

您所需的功能在JavaScript中不存在,因此,是的,您必须通过这种测试来保护代码:if (value && value.field && value.field.field)使用strict(或strictNullCheck)选项,TypeScript可帮助您考虑每个潜在的未定义值,但不会帮助您编写保护代码。但仍有改进的希望。关于“ JavaScript的可选链接”功能的提案仍处于第1阶段,但是非常活跃。当提案到达第3阶段时,TypeScript团队是否可以在TypeScript编译器中启动实现?
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript