簡體   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