Typen van klassen en overerving zijn toegevoegd aan TypeScript ter ondersteuning van objectgeoriënteerde patronen, bekend in andere talen (Java, C#). TypeScript stelt je in staat om klassen te maken met expliciet gedefinieerde types van eigenschappen en methoden, en om overerving met typeveiligheid te implementeren.
Zonder expliciete typeclassificatie in JavaScript worden fouten die verband houden met verkeerd gebruik van eigenschappen niet op compileertijd gedetecteerd. Problemen kunnen zich voordoen bij het overschrijven van methoden/eigenschappen door afgeleiden klassen, bij schending van het contract van de basisklasse en incorrect gebruik van protected/private.
TypeScript maakt gebruik van de sleutelwoorden public, private, protected, stelt je in staat om de types van eigenschappen en methoden expliciet aan te geven, klassen te erven met behulp van extends en interfaces te implementeren.
Voorbeeldcode:
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} maakt een geluid.`); } } class Dog extends Animal { constructor(name: string, age: number) { super(name, age); } speak(): void { console.log(`${this.name} blaft.`); } } const dog = new Dog("Rex", 4); dog.speak(); // Rex blaft.
Belangrijke kenmerken:
Wat gebeurt er als je het type van een klassetype niet opgeeft?
TypeScript zal proberen het type af te leiden op basis van de toegewezen waarde, als deze er is. Als dat niet het geval is, zal het type any zijn, wat de veiligheid van de code vermindert.
class Test { value; constructor(v: number) { this.value = v; } }
value zal van het type any zijn, als er geen standaardwaarde is opgegeven - een potentiële tekortkoming in typeveiligheid.
Kan de toegangsmodificator van een geërfde methode worden gewijzigd?
Ja, maar alleen door het te versterken (bijvoorbeeld van public naar protected of private - dat kan niet), maar van private naar public kan niet, omdat een private-lid niet wordt geërfd. Dit zal leiden tot een compileerfout.
Kan je in TypeScript van meerdere klassen erven?
Nee, meervoudige overerving van klassen is niet toegestaan. Je kunt meerdere interfaces implementeren, maar slechts één extends van een klasse.
In het project werden alle klassen gedeclareerd zonder toegangsmodificatoren en expliciete types om de ontwikkeling te versnellen.
Voordelen:
Nadelen:
Alle leden van de klasse zijn zorgvuldig getypeerd, gebruikt private/protected/public, strikte typeclassificatie van eigenschappen en methoden.
Voordelen:
Nadelen: