Typescript 没有根据回调返回类型选择正确的重载



给定以下代码(游乐场链接:http://bit.ly/1n7Fcow)

declare function pick<T, V>(f:(x:T, y:V) => V):V;
declare function pick<T, V>(f:(x:T, y:V) => T):T;
var xx = pick((x: number, y:string) => x);
var yy = pick((x: number, y:string) => y);

TypeScript选择了一个错误的重载,无法推断出xx的类型。

有可能让typescript选择正确的重载吗?

注意:为了避免XY问题,这是原来的问题- http://bit.ly/QXaQGc -我需要这种重载,以便能够正确地建模承诺

通过将调用更改为:

,我能够让playground正确推断xx和yy的正确类型
declare function pick<T, V>( f:(x:T, y:V) => V ):V;
declare function pick<T, V>( f:(x:T, y:V) => T ):T;
var xx = pick<number,string>((x, y) => x);
var yx = pick<number,string>((x, y) => y);

请看这里:http://bit.ly/1p6h8iP

最新更新