2014-05-18 8 views
6

den folgenden Code Given (Spielplatz Link: http://bit.ly/1n7Fcow)Typoskript nicht die richtige Überlastung wählen basierend auf Rückruf Rückgabetyp

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); 

Typoskript wählt eine falsche Überlastung und nicht die Art von xx abzuleiten.

Ist es möglich, Typoskript dort die richtige Überladung wählen?

Hinweis: Um das XY-Problem zu vermeiden, ist dies das ursprüngliche Problem - - Ich brauche diese Art der Überladung, um Versprechen richtig modellieren zu können.

Antwort

1

konnte ich den Spielplatz bekommen die richtige Art von xx zu schließen und durch eine Änderung dieses korrekt yy den Anruf an:

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); 

Siehe hier: http://bit.ly/1p6h8iP Hope this Hilfe.

+0

Also im ursprünglichen Problem werde ich 'v1.then (n => join2 (n, n.toString())) verwenden, obwohl alle Typen bereits bekannt sind. Ich denke, ich muss einen Fehler einreichen ... –

+0

Ich stimme dir zu, sollte Typoskript in der Lage sein, den Typ von den Typ der Argumente zurückgegeben und der tatsächliche Typ zurückgegeben. Ich habe das gleiche Problem bei der Verwendung von underscore.js und die einzige Möglichkeit, es zu lösen, ist die generischen Argumente einzugeben. – micurs

Verwandte Themen