我正在编写一个Array的扩展,并试图将typechecking与Flow结合,但是有一个我似乎无法解决的错误。
下面的函数Sum有一个变量的可选参数,如果未定义变换器,则给它一个默认值。然后循环遍历数组,如果元素是数字,则应用变换器函数并将结果添加到sum。
Flow发出警告“无法在可能的未定义值上调用函数”。我认为变压器定义的检查是一个功能应该减轻这个?什么是最好的解决方案?
// @flow
export function Sum(transformer : ?(a : number) => number) : number {
const transformerIsUndefined = typeof(transformer) === "undefined";
if (!transformerIsUndefined && typeof(transformer) !== "function") {
throw "Transform argument must be a function";
}
if (transformerIsUndefined) {
transformer = item => item;
}
let i : number = 0;
let sum : number = 0;
while (i < this.length) {
if (typeof(this[i]) === "number") {
sum += transformer(this[i]);
} else {
throw "Non-numerical element in the array.";
}
i++;
}
return sum;
}
答案 0 :(得分:0)
我通过将参数更改为required并在函数签名中提供默认值来解决此问题:
export function Sum(transformer : (a : number) => number = item => item) : number {
...
}
我仍然会对此采取其他措施感兴趣。