簡體   English   中英

如果Flow無法自動推斷var,那么如何聲明該變量已被初始化?

[英]How to declare that a var has now been initialized, if Flow can't infer it automatically?

在Flow的REPL中嘗試以下代碼

const numbers = [5, 3, 22, 2, 6];

let max: number;

numbers.forEach(item => {
  if (!max || item > max) max = item;
});

console.log(max++); // type error

我可以確定max將被初始化為max++表達式之前的數字。 但是Flow無法自動推斷出這一點,因此它會抱怨。

我要對Flow說,在forEach之后:請假設max變量現在已經初始化。 有沒有辦法做到這一點?

(相關– Flow具有“聲明”: declare var max: number; –這使您可以聲明全局范圍內存在一個名為var的數字變量。但是您不能使用它來重新聲明已經在自己的范圍內聲明的內容。)

您可以通過let max: number = numbers[0];初始化max let max: number = numbers[0]; 那應該阻止人們抱怨。

您還可以用一種不太易變的方式重寫代碼:

const numbers = [5, 3, 22, 2, 6];

const max = numbers.reduce((max, item) => item > max ? item : max,
  Number.NEGATIVE_INFINITY);

console.log(max + 1);

這樣可以避免任何形式的變異,從而使Flow的生活更加輕松(也可能對人類來說也很容易:))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM