Warum erkennt TypeScript keine Typen für bestimmte Funktionen?

10

Update 20. Februar 2018: veröffentlichte dies als Problem auf GitHub .

Update 28. Februar: geschlossen dieses Problem zugunsten ein neues .

Im folgenden Codefragment zeigt TypeScript bei der Betrachtung der letzten beiden Zeilen einen Fehler in der ersten Zeile an und leitet Typen in der zweiten Zeile korrekt ab, obwohl der Unterschied nur die Reihenfolge ist, in der die Funktionen weitergeleitet werden.

%Vor%

Ich verwende TypeScript 2.7.1 im strikten Modus (einschließlich strictFunctionTypes), aber der strikte Modus scheint hier keine Rolle zu spielen. Hier ist dieses Snippet auf TypeScript playground .

Es ist ein Problem, auf das ich oft stoße, wenn ich mit RxJS arbeite, da es in RxJS eine ähnliche pipe -Methode gibt und ich Pfeilfunktionen an sie übergebe, wenn ich Erstellungsoperatoren verwende (wie obs => merge(obs, otherObs) ). Normalerweise ist es einfach, dieses Problem zu umgehen, indem Sie den Argumenttyp angeben, aber ich möchte die Logik dahinter verstehen. Warum kann TypeScript den Typ in einem Fall, nicht aber in dem anderen Fall ableiten?

    
Ivan 14.02.2018, 11:56
quelle

1 Antwort

2

Dieses Problem ist immer noch offen, aber im Moment wollte ich einen Workaround posten, den ich gefunden habe, weil ich es nach meiner Erfahrung für sehr nützlich fand.

Erstellen Sie eine Dienstprogrammfunktion wie folgt:

%Vor%

(dieselbe Funktion wie in der Frage, eine Identity-Funktion, die als Argument eine unäre Funktion annimmt), und wenn Sie Probleme mit einer Pfeilfunktion in Ihrer Pipe bekommen, versuchen Sie, sie mit dieser Utility-Funktion zu umschließen. Contraintuitiv kann TS nicht damit umgehen:

%Vor%

aber es kann damit umgehen:

%Vor%

(keine Ahnung warum). Später, wenn das Problem behoben ist (gehen Sie voran und upvote es: Ссылка ), werden Sie in der Lage sein, leicht zu finden alle Verweise auf call und entfernen Sie sie.

    
Ivan 13.03.2018 17:12
quelle

Tags und Links