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

时间:2019-03-27 16:00:39

标签: javascript typescript

假设我们有以下声明:

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');
  }

有没有办法“即时”检查中间的那些“田地”不是未定义的?

1 个答案:

答案 0 :(得分:1)

您所需的功能在JavaScript中不存在,因此,是的,您必须通过这种测试来保护代码:

if (value && value.field && value.field.field)

使用strict(或strictNullCheck)选项,TypeScript可以帮助您考虑每个潜在的未定义值,但不会帮助您编写保护代码。

但是有改进的希望。关于"Optional Chaining for JavaScript"功能的建议仍处于第1阶段,但非常活跃。提案到达第3阶段时,也许TypeScript团队可以在TypeScript编译器中启动an implementation