【问题标题】:Error with combining Array types? Error: Cannot invoke an expression whose type lacks a call signature组合数组类型时出错?错误:无法调用类型缺少调用签名的表达式
【发布时间】:2017-09-19 02:12:05
【问题描述】:

此代码导致错误,其文本如下:

function getHandler(handlers: number[] | string[]): any {
    return handlers.map(handler => handler);
}

错误文本:

错误 TS2349:无法调用其类型缺少调用的表达式 签名。输入'{(这个:[字符串,字符串,字符串,字符串,字符串], callbackfn: (value: string, index: number, ...' 没有兼容的调用 签名。

【问题讨论】:

    标签: typescript


    【解决方案1】:

    number[] | string[] 更改为(number|string)[]

    function getHandler(handlers: (number | string)[]): any {
        return handlers.map(handler=>handler);
    }
    

    对该问题的较小重现:

    const handlers: string[] | number[] = [];
    handlers.map(x => x);
    

    原因:仅仅是因为类型系统无法从 string[]|number[] 中判断出项目 x 可能是 string|number。困难在于它总是要么是string 要么是number,而不是真正的同时string|number

    如果你想支持它,你可能想在这里提出它:https://github.com/Microsoft/TypeScript/issues

    【讨论】:

    • number[] | string[] 不是数组?
    猜你喜欢
    • 2017-02-03
    • 2018-11-11
    • 2019-09-10
    • 2019-12-15
    • 2018-12-25
    • 2023-03-20
    • 2019-09-07
    • 2020-04-24
    相关资源
    最近更新 更多