12-3 Modèle Projet
Vous avez peut-être remarqué que vous n'avez pas d'autocomplétion pour les propriétés de l'objet projet. Par exemple, lorsque vous faires projet., l'autocomplétion n'est pas d'une grande aide:

Au fond, notre tableau projets est de type any (projets: any[] = []), donc le compilateur n'a pas vraiment de façon de savoir quelles sont les propriétés valides.
Il nous faudra créer un modèle, soit une classe ou une interface représentant ce qu'est un Projet. On pourra assigner le retour de Supabase à ce modèle et avoir un tableau d'objets. Projet
Créer un dossier core/models
Pour mettre les modèles de l'application, nous allons créer un dossier models sous le dossier core.
- Créez un dossier
core/models
Créer un modèle Projet
En ligne de commande, exécutez la commande suivante pour créer une interface Projet dans le dossier core/models.
ng generate interface core/models/projet
Cela devrait vous donner la hiérarchie suivante:

Et un fichier d'interface projet.ts vide ressemblant à ceci:
export interface Projet {
}
Définir les propriétés
On peut ensuite définir les propriétés:
export interface Projet {
id: number;
nom: string;
description?: string;
image_url?: string;
created_at: string;
updated_at: string;
}
Dates: Les dates sont au format string puisque c'est le format dans lequel Supabase nous les renvoies. Il sera possible de les convertir et formatter dans un format de date en bonne et due forme.
Modifier le type du tableau projets dans les composants projets-index et projets-liste
Dans les composants projets-index et projet-liste, il nous est maintenant possible de spécifier le type d'objets que doit contenir le tableau projets:
-
Modifiez la propriété
projetsdansProjetsIndexsrc/app/features/projets/pages/projets-index.tsexport class ProjetsIndex implements OnInit {
protected projets: Projet[] | null = null
//...infoIci, on vient typer la propriété
projetscomme un tableau deProjet.Il vous faudra importer la référence à l'aide de WebStorm.
De plus, on en profite pour préciser que la propriété peut être
nullou un tableau deProjet[]. En effet, au tout début, il n'y aura pas du tout de projets, on doit attendre le retour de la requête d'API. Ainsi,projetsdoit êtrenull.Le fait d'attribuer
nullplutôt que d'initialiser à un tableau vide nous permettra plus tard de faire la distinction entre "nous sommes en train de charger la liste de projets" et "il n'y a pas de projets". -
Modifiez la propriété
projetsdansProjetsListe
export class ProjetsListe {
@Input() projets: Projet[] | null = null
}
La propriété nom est maintenant reconnue correctement!
