generics - Jsou parametry typu Promise kontrolovány v TypeScriptu?
Proč následující příklad nevygeneruje varování kompilátoru TypeScript (místo toho selže při běhu), když se pokouším pracovat s foo jako Promise<string>?
let foo: Promise<string> = Promise.resolve(10); // should not compile
foo.then(v => v.toUpperCase());
// -> TypeError: v.toUpperCase is not a function
Pouze pokud vložím Promise.resolve<string>(10), dostanu chybu, ale to by nemělo být vyžadováno, protože překladač TypeScript je dost chytrý na to, aby odvodil typ pravé strany jako Promise<number>, když je kontrolována. Takže proč mi to nevyvolá chybu, když se pokusím toto přiřazení provést? Také, existuje nějaké řešení, kromě explicitního určení typu? Používám TypeScript 2.0.9.
Odpověď č. 1
Zdá se, že se jedná o známý problém (viz také #10524, což je hlavní sledovací problém pro tento problém) a měl by být opraven ve verzi v2.1.2 pomocí propojeného commitu. Měli byste být schopni provést aktualizaci a typy pak budou správně vynuceny, jak bylo zamýšleno.
Pokud problém přetrvává ve verzi v2.1.x, můj návrh by byl nahlásit chybu do jejich sledovače problémů.