Leçons du module (1/2)
Classes et Modificateurs
TypeScript étend les classes standard d'ES6 avec des fonctionnalités puissantes du paradigme orienté objet (POO), telles que le typage statique, les modificateurs d'accès et les propriétés abrégées.
Classes et Modificateurs d'Accès
En TypeScript, vous pouvez contrôler la visibilité des membres, des propriétés et des méthodes à l'aide de trois mots-clés principaux :
public(par défaut) : le membre est accessible de n'importe où.private: le membre est accessible uniquement à l'intérieur de la classe qui le définit.protected: le membre est accessible à l'intérieur de la classe et de ses sous-classes (héritage).
class Animal {
public name: string;
private age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
public getAge(): number {
return this.age;
}
}Propriétés Paramètres (Parameter Properties)
TypeScript propose une syntaxe abrégée pour déclarer et initialiser les membres d'une classe directement dans le constructeur. En ajoutant un modificateur d'accès devant le paramètre du constructeur, la propriété est automatiquement créée et affectée :
// Cette syntaxe fait exactement la même chose que l'exemple précédent !
class Animal {
constructor(
public name: string,
private age: number,
) {}
}Implémentation d'Interfaces
Une classe peut implémenter une ou plusieurs interfaces à l'aide du mot-clé implements. Cela garantit que la classe respecte un contrat spécifique en définissant toutes les méthodes et propriétés requises :
interface Flyable {
fly(altitude: number): void;
}
class Bird implements Flyable {
constructor(public name: string) {}
fly(altitude: number): void {
console.log(`${this.name} sta volando a ${altitude} metri.`);
}
}Héritage et super
TypeScript prend pleinement en charge l'héritage de classes. Une classe peut en étendre une autre à l'aide du mot-clé extends. Si la sous-classe définit un constructeur, celui-ci doit appeler le constructeur de la classe de base à l'aide de la fonction super() avant de pouvoir accéder à this :
class Person {
constructor(public name: string) {}
}
class Student extends Person {
constructor(
name: string,
public grade: number,
) {
super(name); // Chiama il costruttore di Person
}
}À toi de jouer
Exercice 1 : Classe Car et Modificateur Private
Déclare une classe nommée Car. Elle doit avoir une propriété readonly model (chaîne) définie dans le constructeur, une propriété privée mileage (nombre) initialisée à 0, une méthode publique drive(miles: number): void qui incrémente mileage de miles, et un getter ou méthode getMileage(): number qui retourne mileage.
Afficher l'indice
Utilise private mileage: number = 0; pour rendre la variable privée, et constructor(public readonly model: string) {} comme raccourci.
Solution disponible après 3 tentatives
Exercice 2 : Interface Shape et Classe Circle
Complète le code en implémentant la classe Circle qui implémente l'interface Shape. La classe doit avoir une propriété readonly radius (nombre) définie via le constructeur, et implémenter getArea(): number (qui retourne Math.PI * radius * radius).
Afficher l'indice
Utilise implements Shape sur la classe Circle et définis la méthode getArea(): number.
Solution disponible après 3 tentatives
Exercice 3 : Classe Abstraite Vehicle et Sous-classe Motorcycle
Déclare une classe nommée Motorcycle qui étend la classe abstraite Vehicle. Elle doit implémenter la méthode start() pour retourner la chaîne 'Motorcycle ' suivie de la marque (this.make) et de ' started'.
Afficher l'indice
Utilise class Motorcycle extends Vehicle et implémente la méthode start(): string qui retourne la chaîne correcte.
Solution disponible après 3 tentatives
Exercice 4 : Propriétés Paramètres et Héritage
Crée une classe nommée Employee qui définit une propriété en lecture seule id (nombre) et une propriété publique name (chaîne) via un raccourci dans le constructeur. Crée ensuite une classe Developer qui étend Employee et ajoute une propriété publique department (chaîne) via le constructeur.
Afficher l'indice
Utilise super(id, name) dans le constructeur de Developer et utilise public department pour définir la propriété via le constructeur.
Solution disponible après 3 tentatives