Les types de classes et l'héritage ont été ajoutés à TypeScript pour supporter des modèles orientés objet, familiers dans d'autres langages (Java, C#). TypeScript permet de créer des classes avec des types de propriétés et de méthodes explicitement définis, ainsi que d'implémenter l'héritage avec sécurité de type.
Sans typage explicite en JavaScript, les erreurs liées à une utilisation incorrecte des propriétés ne sont pas détectées lors de la compilation. Les problèmes surviennent lors de la redéfinition des méthodes/propriétés par les descendants, en cas de non-respect du contrat de la classe de base et d'une mauvaise manipulation des membres protected/private.
TypeScript permet d'utiliser les mots-clés public, private, protected, de spécifier explicitement les types des propriétés et des méthodes, d'hériter des classes à l'aide de extends et de mettre en œuvre des interfaces.
Exemple de code :
class Animal { public name: string; protected age: number; private secret: string = "hidden"; constructor(name: string, age: number) { this.name = name; this.age = age; } speak(): void { console.log(`${this.name} makes a sound.`); } } class Dog extends Animal { constructor(name: string, age: number) { super(name, age); } speak(): void { console.log(`${this.name} barks.`); } } const dog = new Dog("Rex", 4); dog.speak(); // Rex barks.
Principales caractéristiques :
Que se passe-t-il si le type d'un champ de classe n'est pas spécifié ?
TypeScript essaiera de déduire le type à partir de la valeur assignée, si elle existe. Si ce n'est pas le cas, le type sera any, ce qui réduit la sécurité du code.
class Test { value; constructor(v: number) { this.value = v; } }
value sera de type any, s'il n'y a pas de valeur par défaut spécifiée — une faille potentielle dans la sécurité des types.
Peut-on changer le modificateur d'accès d'une méthode héritée ?
Oui, mais uniquement en l'intensifiant (par exemple, de public à protected ou private — ce n’est pas permis), mais passer de private à public n'est pas possible, car un membre private n'est pas hérité. Cela entraînera une erreur de compilation.
Peut-on hériter de plusieurs classes en TypeScript ?
Non, l'héritage multiple des classes est interdit. On peut implémenter plusieurs interfaces, mais seulement une seule classe peut être étendue.
Dans le projet, toutes les classes étaient déclarées sans modificateurs d'accès et types explicites, pour accélérer le développement.
Avantages :
Inconvénients :
Tous les membres de la classe sont soigneusement typés, utilisant private/protected/public, typage strict des propriétés et méthodes.
Avantages :
Inconvénients :