2016-11-27 2 views
3

Warum generiert das folgende Beispiel keine TypeScript-Compiler-Warnung (statt dessen zur Laufzeit zu versagen), wenn ich versuche, unter foo als Promise<string> zu arbeiten?Sind die Parameter für den Zusagtyp in TypeScript überprüft?

let foo: Promise<string> = Promise.resolve(10); // should not compile 
foo.then(v => v.toUpperCase()); 

// -> TypeError: v.toUpperCase is not a function 

Nur wenn ich setzte Promise.resolve<string>(10) machen ich einen Fehler, aber das sollte die erforderliche nicht werden, da die Typoskript Compiler ist intelligent genug, Typen des RHS als Promise<number> wenn inspizierte zu schließen. Warum also schreit es mich nicht an, wenn ich versuche, diese Aufgabe zu erledigen? Gibt es auch eine andere Problemumgehung als die explizite Angabe des Typs? Ich verwende TypeScript 2.0.9.

Antwort

4

Dies scheint ein known issue zu sein (siehe auch #10524, das ist das Hauptverfolgungsproblem für dieses Problem) und sollte fixed in v2.1.2 durch die verknüpfte Festschreibung sein. Sie sollten in der Lage sein, ein Upgrade durchzuführen, und die Typen werden dann ordnungsgemäß wie beabsichtigt durchgesetzt.

Wenn das Problem in v2.1.x weiterhin besteht, würde ich vorschlagen, einen Fehler im Issue Tracker zu melden.

Verwandte Themen