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.