【发布时间】:2017-11-23 08:46:47
【问题描述】:
这是我的函数签名:
export type ReduceCallback<TVal,TAcc>
= (accumulator: TAcc, currentValue: TVal, currentIndex: number, array: TVal[]) => TAcc
export function reduceArray<TVal,TAcc>(
iterable: Iterable<TVal>,
callback: ReduceCallback<TVal,TAcc>,
initialValue: TAcc
): TAcc;
export function reduceArray<TVal>(
iterable: Iterable<TVal>,
callback: ReduceCallback<TVal,TVal>,
initialValue?: TVal
): TVal {
let arr = toArrayStrict(iterable);
if(initialValue === undefined) {
return arr.reduce(callback); // 2nd arg has to be fully omitted
}
return arr.reduce(callback, initialValue);
}
我是这样称呼它的:
reduceArray([0,1,2,3], (acc, val) => acc + val)
tsc 在抱怨:
TS2346:提供的参数与调用目标的任何签名都不匹配。
但我不知道为什么。我的调用应该匹配第二个函数签名,不是吗?我在通话中省略了initialValue,所以它应该别无选择,只能匹配第二个签名。
[0,1,2,3] 是 Iterable<number>,ReduceCallback 应该使用 ReduceCallback<number,number>,这意味着 acc 和 val 是数字。
有什么问题?
【问题讨论】:
标签: typescript