Aller au contenu principal

12-4 Retour de type Promise

Nous ne nous sommes pas trop souciés du type de retour de la fonction obtenirProjets(). Par contre, il est intéressant de regarder le type de retour automatiquement assigné par TypeScript.

img

Le type de retour inféré est Promise<any>.

info

Une fonction asynchrone (async) retourne toujours une promesse (Promise). Cette Promise peut être associée à un type d'objet retourné.

Une promesse est un objet (Promise) qui représente la complétion ou l'échec d'une opération asynchrone

L'opérateur await, pour sa part, permet d'attendre la résolution d'une promesse (Promise). Il ne peut être utilisé qu'au sein d'une fonction asynchrone (définie avec l'instruction async).

Modifier le type de retour pour Promise<Projet[]>

La fonction obtenirProjets retourne un tableau de Projet (Projet[]). Comme il s'agit d'une fonction asynchrone, ce retour final est emballé dans une Promise.

Ainsi, plutôt que d'être une Promise très générique comme Promise<any>, on privilégiera de retourner Promise<Projet[]>.

info

La portion entre < > représente le type d'objet final reçu lorsque la Promise aura été résolue. Ici Projet[].

On peut, de cette façon, modifier la fonction pour retourner le bon type.

src/app/features/projets/pages/projets-index.ts
async obtenirProjets(): Promise<Projet[]>{
let url = "/projets";

let reponse = await api.get(url);
return reponse.data;
}

Typer de retour de l'appel d'API

On peut en plus typer le retour de l'appel d'API!

src/app/features/projets/pages/projets-index.ts
async obtenirProjets(): Promise<Projet[]>{
let url = "/projets";

let reponse = await api.get<Projet[]>(url);
return reponse.data;
}
info

api.get<Projet[]>(url); vient dire à axios que le retour de données (propriété data) sera au type Projet[].

La preuve, regardez le type de reponse.data:

img

Level Up