【问题标题】:Why isn't this code using function subtyping typechecking with Flow?为什么这段代码不使用带有 Flow 的函数子类型类型检查?
【发布时间】:2015-06-09 22:43:21
【问题描述】:

为什么这段代码不与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

【问题讨论】:

    标签: javascript flowtype


    【解决方案1】:

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

    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]);
    

    所以,如果我理解正确,“接受 2 个数字的函数”不是“接受任意数量的任何参数的函数”的子类型,即使它在逻辑上子类型。

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

    【讨论】:

    • 很高兴你知道了!我相信你误认为一个有 2 个参数的函数是一个有 n 个参数的函数的子类型。事实上,我认为情况正好相反。
    猜你喜欢
    • 1970-01-01
    • 2016-06-04
    • 1970-01-01
    • 1970-01-01
    • 2011-02-04
    • 2018-12-29
    • 2020-06-26
    • 2019-08-18
    • 2015-04-14
    相关资源
    最近更新 更多