解决流类型错误

时间:2016-12-15 16:50:12

标签: javascript flowtype

我正在编写一个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;
}

1 个答案:

答案 0 :(得分:0)

我通过将参数更改为required并在函数签名中提供默认值来解决此问题:

export function Sum(transformer : (a : number) => number = item => item) : number {
    ...
}

我仍然会对此采取其他措施感兴趣。