为什么这个代码不使用函数子类型使用Flow进行类型检查?

时间:2015-05-10 12:14:21

标签: javascript flowtype

为什么这个代码没有使用flow打字?

function runFunction<I, O>( fun: (...args:Array<I>) => O, args:Array<I> ): O {
    var res = fun.apply(null, args);
    return res;
}

function myFun(first: number, second: number): string {
    return first + ", " + second;
}

runFunction(myFun, [1, 2]);

我认为我做的一切都是正确的,我仍然得到了这个

function type
Too few arguments (expected default/rest parameters in function)
function

rest array of type parameter I of function call
This type is incompatible with
number

1 个答案:

答案 0 :(得分:0)

哦,现在我明白了。我必须这样做

function runFunction<I, O>( fun: (...args:Array<I>) => O, args:Array<I> ): O {
    var res = fun.apply(null, args);
    return res;
}

function myFun(...args:Array<number>): string {
    return args[0] + ", " + args[1];
}

runFunction(myFun, [1, 2]);

所以,如果我得到正确的话,&#34;功能需要2个数字&#34;不是&#34;函数的子类型,它接受任何数量的任何参数&#34;,即使它在逻辑上 是一个子类型。

我不确定什么是正确的解决方案......我理解,有点,逻辑,但它有点令人困惑。