[英]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.