如果 Flow 无法自动推断,如何声明 var 现在已经初始化了?



在 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。这应该阻止流量抱怨。

您还可以以可变性较低的方式重写代码:

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的生活更轻松(可能对于人类来说也是如此:)

最新更新