2014-05-18 90 views
6

考慮下面的代碼正確的過載(遊樂場鏈接: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); 

打字稿選擇了不正確的過載,無法推斷xx類型。

是否有可能讓打字稿在那裏選擇正確的過載?

注意:爲了避免XY問題,這是最初的問題 - http://bit.ly/QXaQGc - 我需要這種重載,以便能夠正確地對承諾進行建模。

回答

1

我能得到操場推斷正確類型的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 希望這有助於。

+0

因此,在原始問題中,即使所有類型都已知,我仍然必須使用v1.then (n => join2(n,n.toString()))。猜猜我必須提交一個bug ... –

+0

我同意你的觀點,typescript應該能夠推斷從參數類型返回的類型和返回的實際類型。使用underscore.js時,我遇到同樣的問題,解決它的唯一方法是輸入泛型參數。 – micurs