繁体   English   中英

无效保护不适用于内部 forEach 循环

[英]Nullity guard doesn't work for inside forEach loop

在下面的代码中,第二个守卫不能在forEach循环内断言ab.cv的非空性,其中取消注释本地相同的守卫使其工作。 为什么会这样?

type B = {|
    bv: B[], 
    cv: ?number
|}

let ab: B = {bv: [], cv: 1}
if (ab.cv) {          // First guard
  const a = ab.cv + 1 // Works
}
var a2;
if (ab.cv) {                                           // Second guard
  ab.bv.forEach(b => {/*if (ab.cv) */a2 = ab.cv + 1})  // Doesn't work except if uncommented
                                                       // Cannot perform arithmetic operation because null or undefined [1] is not a number.
}

Flow 使在forEach回调之前完成的细化无效。 回调被认为是 function 调用,任何 function 调用都会使细化无效。 文档常见问题解答中有关此的更多信息

解决此问题的一种方法是将检查值存储在局部变量中:

const cv = ab.cv;
var a2;

if (cv) {
  ab.bv.forEach(b => {a2 = cv + 1})
}

尝试

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM