角度8:
我以前在打字的时候用过一个小技巧:
object['accessor']['accessor']['accessor']
得到
object.accessor.accessor.accessor
如果其中一个孩子是空的,就不会有犯错误的风险。
在typescript文件中,根据当今的ecma脚本标准,最好的方法是什么?
编辑:
我发现这个https://medium.com/inside-rimeto/optional-chaining-in-typescript-622c3121f99b
b/嵌套的三元表达式似乎是最好的,但它似乎很复杂
编辑2:
不管怎样,这同样会导致应用程序不可修复地崩溃(尽管是在组件级别)。
似乎较新的语言规则更为严格。他们只是没有提供其他选择。

最佳答案

我更喜欢布尔表达式方法。

let object = {
  accessor: {
    accessor: {
      accessor: "test"
    }
  }
}

if (object
   && object.accessor
   && object.accessor.accessor
   && object.accessor.accessor.accessor) {
  console.log(object.accessor.accessor.accessor);
} else {
  console.log(null);
}

如果你不关心编译时错误检查,你可以做一些像这样奇怪的事情。我不推荐。
function tryGetValue(obj, propertiesPath) {
  if (!obj) {
    return null;
  }

  if (!propertiesPath) {
    return obj;
  }

  let current = obj;
  let properties = propertiesPath.split(".");
  for (let i = 0; i < properties.length; i++) {
    if (current[properties[i]] !== undefined) {
      current = current[properties[i]];
    } else {
      current = null;
      break;
    }
  }

  if (current !== undefined) {
    return current;
  } else {
    return null;
  }
}

console.log(tryGetValue(object, "accessor.accessor.accessor"));

关于angular - Angular 8 Native Typescript无崩溃,访问器速记,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57960362/

10-12 06:57