Défi
Énoncé
Définir l'interface Utilisateur avec les champs id: number, nom: string et email?: string. Écrire la fonction formater(u: Utilisateur): string qui retourne "#<id> <nom> <email>" si l'email est présent, ou "#<id> <nom>" dans le cas contraire. Le compilateur doit garantir que l'accès à email ne peut pas provoquer d'erreur sans vérification préalable.
Contraintes
- TypeScript ≥ 5.0, mode strict activé.
- Utiliser une
interface(pas untypealias ni uneclass). - La gestion du champ optionnel doit utiliser un narrowing explicite (
if (u.email)ou l'opérateur??). - Pas de
!(non-null assertion) suremail. - Pas de bibliothèque externe.
Exemple
interface Utilisateur {
id: number;
nom: string;
email?: string;
}
function formater(u: Utilisateur): string {
return u.email ? `#${u.id} ${u.nom} ${u.email}` : `#${u.id} ${u.nom}`;
}
const u1: Utilisateur = { id: 1, nom: "Alice", email: "alice@example.com" };
const u2: Utilisateur = { id: 2, nom: "Bob" };
console.log(formater(u1));
console.log(formater(u2));
#1 Alice alice@example.com
#2 Bob