2016-11-27 3 views
3

Pourquoi l'exemple suivant ne génère-t-il pas d'avertissement de compilateur TypeScript (échouant au moment de l'exécution) lorsque j'essaie de travailler sur foo en tant que Promise<string>?Les paramètres de type de promesse sont-ils cochés dans TypeScript?

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

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

Seulement si je mets Promise.resolve<string>(10)-je obtenir une erreur, mais cela ne devrait pas être le nécessaire comme le compilateur dactylographiée est assez intelligent pour déduire le type de l'ERS comme Promise<number> lors de l'inspection. Alors pourquoi ça ne me crie pas quand j'essaye de faire ce devoir? En outre, existe-t-il une solution de contournement pour cela autre que la spécification de type explicitement? J'utilise TypeScript 2.0.9.

Répondre

4

Cela semble être un known issue (voir également #10524, qui est le problème de suivi principal pour ce problème) et doit être fixed in v2.1.2 par le commit lié. Vous devriez être en mesure de mettre à niveau et les types seront ensuite appliqués correctement, comme prévu.

Si le problème persiste dans v2.1.x, ma suggestion serait de signaler un bug dans leur programme de suivi des problèmes.