Javascript 属性空值检查不执行';不要在迭代中工作

Javascript 属性空值检查不执行';不要在迭代中工作,javascript,functional-programming,flowtype,Javascript,Functional Programming,Flowtype,在下面的代码中,ab.bv检查无法迭代ab.bv。但是,它可以访问ab.bv的元素。if(ab.bv)检查是否未检查ab.bv的空值 类型B={| bv:?B[], |} 常数c:B=>void=n=>{} 设ab:B={bv:[]} if(ab.bv){ for(ab.bv中的const v2){//ab.bv中的错误:无法使用`for…in`语句进行迭代,因为数组类型[1]不是对象、null或未定义。[在rhs中无效] c({…ab}) } c({…ab.bv[0]})//工作 } 精化工作

在下面的代码中,
ab.bv
检查无法迭代
ab.bv
。但是,它可以访问
ab.bv
的元素。
if(ab.bv)
检查是否未检查
ab.bv
的空值

类型B={|
bv:?B[],
|}
常数c:B=>void=n=>{}
设ab:B={bv:[]}
if(ab.bv){
for(ab.bv中的const v2){//ab.bv中的错误:无法使用`for…in`语句进行迭代,因为数组类型[1]不是对象、null或未定义。[在rhs中无效]
c({…ab})
}
c({…ab.bv[0]})//工作
}

精化工作正常,只是错误有点不清楚。Flow试图告诉您应该使用
for…of
来迭代数组,而不是
for…in
(因为您将获得索引而不是数组项):

let ab: B = {bv: []}
if (ab.bv) {
  for (const v2 of ab.bv) { // Works
    c(v2)
  }
  c({...ab.bv[0]}) // Works
}