logo oujood
🔍

📐 Interfaces orientées objet en TypeScript

Une interface permet de définir un contrat que les classes doivent respecter. Elle décrit les propriétés et les méthodes attendues, sans fournir de logique. Cela favorise la clarté, la maintenabilité, et l’extensibilité du code.

OUJOOD.COM

🎯 Pourquoi utiliser une interface avec une classe ?

  • Pour s’assurer que toutes les classes respectent la même structure
  • Pour favoriser la réutilisabilité et la documentation implicite
  • Pour permettre une programmation orientée contrat

🧱 Définir une interface pour une classe

📋 Copier le code

interface Affichable {
  afficher(): string;
}

class Produit implements Affichable {
  constructor(public nom: string, public prix: number) {}

  afficher(): string {
    return \`\${this.nom} coûte \${this.prix} €\`;
  }
}

const p = new Produit("Clavier", 49.99);
console.log(p.afficher());
  • interface Affichable définit une méthode afficher()
  • class Produit implements Affichable oblige la classe à fournir cette méthode
  • Si la méthode est absente ou incorrecte, TypeScript affiche une erreur

🔗 Interface avec plusieurs propriétés et méthodes

📋 Copier le code

interface Utilisateur {
  nom: string;
  age: number;
  sePresenter(): string;
}

class Admin implements Utilisateur {
  constructor(public nom: string, public age: number) {}

  sePresenter(): string {
    return \`Je suis l'admin \${this.nom}, j'ai \${this.age} ans.\`;
  }
}
  • L’interface Utilisateur définit les propriétés et une méthode
  • La classe Admin doit implémenter toutes les parties de l’interface

🧬 Interface vs Classe abstraite

Une interface ne contient pas de logique. Si tu veux un modèle avec logique partielle, il faudra utiliser une classe abstraite (vue dans un prochain chapitre).

🔁 Implémenter plusieurs interfaces

📋 Copier le code

interface Identifiable {
  id: number;
}

interface Affichable {
  afficher(): string;
}

class Article implements Identifiable, Affichable {
  constructor(public id: number, public nom: string) {}

  afficher(): string {
    return \`Article n°\${this.id} : \${this.nom}\`;
  }
}
  • Une classe peut implémenter plusieurs interfaces, séparées par une virgule
  • Elle doit respecter les contrats cumulés de toutes les interfaces

📌 Résumé

  • interface définit une structure à respecter
  • implements force une classe à respecter cette structure
  • Utilisation idéale pour garantir des comportements partagés
  • Une classe peut implémenter plusieurs interfaces à la fois

🧭 Prochaine étape

Dans le prochain chapitre, nous allons aborder les **classes abstraites**, qui permettent de combiner des comportements concrets et des parties à implémenter.

Souhaites-tu passer au Chapitre 5 du Module 2 : Classes abstraites en TypeScript ?