组合数组类型时出错?错误:无法调用类型缺少调用签名的表达式

Khu*_*rob 1 typescript

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

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

错误文本:

错误 TS2349:无法调用类型缺少调用签名的表达式。类型 '{ (this: [string, string, string, string, string], callbackfn: (value: string, index: number, ...' 没有兼容的调用签名。

bas*_*rat 6

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

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

该问题的较小重现:

const handlers: string[] | number[] = [];
handlers.map(x => x);
Run Code Online (Sandbox Code Playgroud)

原因:仅仅是因为类型系统无法从string[]|number[]该项目中找出x可能是string|number. 难点在于,它总是要么string或要么number并不真正string|number同时。

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