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
Pour un utilisateur { id: 1, nom: "Alice", email: "alice@example.com" } puis
un utilisateur { id: 2, nom: "Bob" } sans email, sortie attendue :
#1 Alice alice@example.com
#2 Bob
Aucun espace en fin de seconde ligne, et surtout pas d'undefined.