Definire una relazione di ereditarietà tra le classi è molto semplice in TypeScript. Con la stessa sintassi di ES6, possiamo utilizzare la parola chiave extends per indicare che una classe estende (o deriva o eredita da) una classe.
Il seguente esempio mostra come definire una classe Studente
che deriva dalla classe Persona
che abbiamo visto prima:
enum Materie {Storia, Informatica, Matematica, Scienze};
class Studente extends Persona {
materie: Materie[];
constructor(nome, cognome) {
super(nome, cognome);
}
}
All'interno del costruttore abbiamo invocato il costruttore della classe base, cioè la classe Persona
da cui deriva Studente
, tramite la parola chiave super. Questo fa sì che una nuova istanza di Studente
inizializzi le proprietà nome
e cognome
ereditate da Persona
.
Possiamo utilizzare la parola chiave super anche per poter accedere ai metodi della classe base. Ad esempio, potremmo definire un metodo che restituisce il nome e cognome completo preceduto dal titolo "Studente
":
getNomeCompletoConTitolo() {
return "Studente " + super.getNomeCompleto();
}
Naturalmente ciascuna istanza della classe Studente
avrà i membri della classe base:
var marioRossi = new Studente("Mario", "Rossi");
marioRossi.materie = [Materie.Storia, Materie.Informatica];
console.log(marioRossi.nome); //Mario
console.log(marioRossi.cognome); //Rossi
Come possiamo vedere, la sintassi di TypeScript che, ricordiamo, coincide in questo caso con quella di ES6, semplifica notevolmente la gestione dell'ereditarietà rispetto all'approccio classico di JavaScript rendendola molto simile a quella dei linguaggi di programmazione orientata agli oggetti tradizionali.