TypeScript - Étendre les Interfaces
Bonjour, futurs superstars du codage ! Aujourd'hui, nous allons plonger dans le monde passionnant des interfaces TypeScript et apprendre comment les étendre. À la fin de cette leçon, vous serez en mesure de créer des interfaces puissantes et flexibles comme un pro. Alors, prenez votre boisson favorite, installez-vous confortablement, et commencer notre voyage !
Syntaxe
Avant de rentrer dans les détails, penchons-nous sur les bases. En TypeScript, étendre une interface est aussi simple que d'utiliser le mot-clé extends
. Voici la syntaxe générale :
interface EnfantInterface extends ParentInterface {
// Propriétés ou méthodes supplémentaires
}
Pensez-y comme l'héritage dans une famille royale. L'interface enfant "hérite" de toutes les propriétés et méthodes de l'interface parent, et peut également ajouter ses propres fonctionnalités uniques.
Étendre une Unique Interface
Commençons par un exemple simple. Imaginons que nous créons un jeu sur des créatures magiques. Nous commencerons par une interface de base Creature
:
interface Creature {
name: string;
age: number;
}
Maintenant, disons que nous voulons créer un type spécial de créature - un dragon ! Nous pouvons étendre l'interface Creature
pour créer une interface Dragon
:
interface Dragon extends Creature {
breatheFire: () => void;
wingspan: number;
}
Dans cet exemple, Dragon
hérite des propriétés name
et age
de Creature
, et ajoute sa propre méthode breatheFire
et propriété wingspan
.
Voyons comment nous pouvons utiliser cela :
const smaug: Dragon = {
name: "Smaug",
age: 1000,
wingspan: 200,
breatheFire: () => console.log("Rugissement ! ?")
};
console.log(smaug.name); // Sortie : Smaug
smaug.breatheFire(); // Sortie : Rugissement ! ?
Comme vous pouvez le voir, smaug
a toutes les propriétés d'une Creature
, plus les fonctionnalités spécifiques au dragon.
Étendre Plusieurs Interfaces
Que se passe-t-il si notre dragon n'est pas seulement une créature, mais aussi un gardien de trésors ? En TypeScript, nous pouvons étendre plusieurs interfaces ! Créons une interface TreasureKeeper
et étendons les deux :
interface TreasureKeeper {
treasureCount: number;
addTreasure: (item: string) => void;
}
interface DragonLord extends Creature, TreasureKeeper {
breatheFire: () => void;
wingspan: number;
}
Maintenant, notre DragonLord
est une créature qui peut à la fois cracher du feu et accumuler des trésors. Génial, non ?
const falkor: DragonLord = {
name: "Falkor",
age: 500,
wingspan: 150,
treasureCount: 1000,
breatheFire: () => console.log("Whoosh ! ?"),
addTreasure: (item) => console.log(`Ajouté ${item} au trésor !`)
};
falkor.addTreasure("Couronne dorée"); // Sortie : Ajouté Couronne dorée au trésor !
Améliorer une Interface Existante
Parfois, vous pourriez vouloir ajouter plus de propriétés à une interface existante. TypeScript vous permet de faire cela en déclarant à nouveau l'interface avec les nouvelles propriétés :
interface Creature {
species: string;
}
const unicorn: Creature = {
name: "Sparkles",
age: 100,
species: "Licorne"
};
Maintenant Creature
a les propriétés name
, age
, et species
. Cette technique est appelée "fusion de déclarations".
Créer des Interfaces Composites
Vous pouvez également créer de nouvelles interfaces en combinant des interfaces existantes en utilisant les types d'intersection :
interface Flyer {
fly: () => void;
}
interface Swimmer {
swim: () => void;
}
type FishVolant = Flyer & Swimmer;
const nemo: FishVolant = {
fly: () => console.log("Je vole ! ?✈️"),
swim: () => console.log("Juste continue de nager ! ?♂️")
};
nemo.fly(); // Sortie : Je vole ! ?✈️
nemo.swim(); // Sortie : Juste continue de nager ! ?♂️
Surcharger les Propriétés et les Méthodes
Lors de l'extension des interfaces, vous pouvez surcharger les propriétés et les méthodes de l'interface parent. Cela est utile lorsque vous souhaitez être plus spécifique sur une propriété ou une méthode dans l'interface enfant :
interface Animal {
makeSound: () => void;
}
interface Cat extends Animal {
makeSound: () => string; // Type de retour plus spécifique
}
const kitty: Cat = {
makeSound: () => "Miaou !"
};
console.log(kitty.makeSound()); // Sortie : Miaou !
Dans cet exemple, nous avons surchargé la méthode makeSound
pour qu'elle retourne une chaîne de caractères au lieu de void
.
Voici un tableau résumant les méthodes que nous avons couvertes :
Méthode | Description |
---|---|
Étendre une Unique Interface | Utilisez le mot-clé extends pour hériter d'une interface |
Étendre Plusieurs Interfaces | Utilisez extends avec des interfaces séparées par des virgules |
Améliorer une Interface Existante | Déclarez à nouveau l'interface avec les nouvelles propriétés |
Créer des Interfaces Composites | Utilisez les types d'intersection (& ) pour combiner des interfaces |
Surcharger les Propriétés et les Méthodes | Redéfinissez les propriétés ou les méthodes dans l'interface enfant |
Et voilà, les amis ! Vous venez de monter en niveau vos compétences TypeScript en maîtrisant l'extension des interfaces. Souvenez-vous, les interfaces sont comme des briques LEGO - vous pouvez les combiner de manière infinie pour construire des structures complexes et sécurisées dans votre code.
Alors, continuez votre voyage de codage, vous trouverez que ces techniques vous aideront à créer du code plus flexible, réutilisable et maintenable. Allez-y et interfacez avec confiance ! Bon codage ! ?????
Credits: Image by storyset