ben tu dit que testP est de type Promise number et tu veut créer une promise string
Bonjour,
Je commence à utiliser typescript et je fais face à un problème qui commence à me rendre fou ...
Assignation d'un type au return d'une fonction
Voila, je ne comprends pas bien comment fonctionne l'assignation de type pour une promesse.
Je vous montre 2 morceaux de code
Ce code me renvoit bien une erreur de compilation, jusque la pas de problème.
En revanche, si je transforme mon code comme ceci
La, pas de soucis, le code se compile alors que selon moi il devrait renvoyer la même erreur que précédemment.
Je me doute que je dois faire une erreur grossière, mais je bloque complètement ...
Des idées ?
Merci d'avance !
9 réponses
Par defaut, new Promise() est de type Promise<any> qui passe donc la validation.
Dans la documentation de typescript, il est indiqué ceci pour any
We may need to describe the type of variables that we do not know when we are writing an application. These values may come from dynamic content, e.g. from the user or a 3rd party library. In these cases, we want to opt-out of type-checking and let the values pass through compile-time checks
Defy: oui, le premier code renvoit une erreur ce qui est normal, je ne comprends pas pourquoi le second n'en renvoit pas.
Prbaron: Oui, le type par défaut est bien "any", mais le problème ne change pas.
Pourquoi:
Ne renvoit pas d'erreur.
Mais:
En renvoit une.
Je dois apsser à coté de quelque chose ...
Dans la documentation de typescript, il est indiqué ceci pour any
We may need to describe the type of variables that we do not know when we are writing an application. These values may come from dynamic content, e.g. from the user or a 3rd party library. In these cases, we want to opt-out of type-checking and let the values pass through compile-time checks
Cela signifie que ton type n'est pas analysé et qu'il assume que tu va bien renvoyer un number.
Ok, merci beaucoup pour ta réponse !
Mais du coup il y a quelque chose que je ne comprends pas.
J'ai fais le tuto d'angular 2: https://angular.io/docs/ts/latest/tutorial/
Et il y a une chose que je ne comprends pas.
Voila un extrait du code
Et maintenant, imaginons que la requette http renvoie:
Je m'attend à ce que mon code est un bug car un des id est un string et pas un number.
Or, rien, pas de soucis tout roule.
Pourquoi ?
Voici la définition de toPromise in rxjs
Je pense qu'il utilise root.Promise qui est l'implémentation de window.Promise et tu coup on en revient à la même explication que plus haut, cela crée une Promise<any>.
Ceci n'est qu'une déduction cependant.
PS : data est de type any et pas de type Hero[].
Ok, cela confirme ce que je pensais, à savoir que le toPromise() crée une Promise<any>.
Ma question: comment faire pour que cela me déclenche une erreur si je ne recoit pas un tableux de "Hero".
Rajouter cela:
Ne change absolument rien.
Ps: Merci pour le temps passer à me répondre :)
Je pense qu'il faudrait plutot itérer sur ton response.json().data pour créer un new Hero(). Comme ça tu es sûr de ce que tu as dans ton objet.
Ok je vais chercher de ce coté la alors :)
Merci beaucoup en tout cas !