Javascript 为什么不是';这段代码是否使用函数子类型和流进行类型检查?

Javascript 为什么不是';这段代码是否使用函数子类型和流进行类型检查?,javascript,flowtype,Javascript,Flowtype,为什么这段代码不能用打字机打字 哦,现在我明白了。我必须这样做 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 { retu

为什么这段代码不能用打字机打字


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

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]);
function运行函数(fun:(…args:Array)=>O,args:Array:O{
var res=fun.apply(null,args);
返回res;
}
函数myFun(…参数:数组):字符串{
返回参数[0]+“,“+args[1];
}
runFunction(myFun[1,2]);
所以,如果我理解正确,“取2个数的函数”不是“取任意数量的任何参数的函数”的子类型,即使它在逻辑上是一个子类型


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

很高兴你能理解!我相信你错了,2个参数的函数是n个参数的函数的子类型。事实上,我认为情况恰恰相反。
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
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]);