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