打字稿:数组上的问号

时间:2020-02-28 19:17:29

标签: typescript

这是我的代码的骨架:

var myArray: (Array<any> | null);
if (cnd) {
  myArray = [];
  myArray?.push(elt); // Question 1
  myArray[0].key = value; //Question 2
} else {
  myArray = null;
}

问题1:为什么需要?? myArray已分配给一个空数组。

问题2:避免错误的语法是什么:对象可能为null。

感谢您的回答。

2 个答案:

答案 0 :(得分:2)

我认为答案是人类仍然比类型检查器更聪明。我知道那并不令人满意,但这是事实。类型检查器通常仅使用条件语句来确定某些内容是否可以为null。但是这个代码示例有些人为的。我可能会像这样重组代码:

var myArray: (Array<any> | null);
if (cnd) {
  elt.key = value;
  myArray = [elt];
} else {
  myArray = null;
}

这消除了这两个奇怪之处。

答案 1 :(得分:0)

对于问题1,您可以参考此link

对于问题2,只需在访问对象之前像这样对null进行检查

if (obj !== null) {
    obj.doSomeThing();
}

,或者如果您的对象可以是nullundefined,则类似于以下内容。 nullundefined被称为伪造值,因此在布尔上下文中使用它们时,它们会自动强制为false

if (obj) {
    obj.doSomeThing();
}