ProgrammatieFrontend ontwikkelaar

Hoe werkt typeclassificatie en overerving in TypeScript? Wat zijn de bijzonderheden van het declareren van eigenschappen en methoden, welke problemen kunnen zich voordoen en hoe deze op te lossen?

Slaag voor sollicitatiegesprekken met de Hintsage AI-assistent

Antwoord.

Geschiedenis van de kwestie

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.

Probleem

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.

Oplossing

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:

  • Expliciete declaratie van types voor eigenschappen en methoden van de klasse
  • Gebruik van toegangsmodificatoren voor encapsulatie
  • Ondersteuning voor overerving en het overschrijven van methoden met typecontrole

Misleidende vragen.

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.

Typische fouten en antipatronen

  • Geen typespecificatie van eigenschappen leidt tot impliciete any
  • Incorrecte overschrijving van methoden (met niet-overeenkomende handtekeningen)
  • Schending van encapsulatie (openstellen van private eigenschappen)

Voorbeeld uit het leven

Negatieve case

In het project werden alle klassen gedeclareerd zonder toegangsmodificatoren en expliciete types om de ontwikkeling te versnellen.

Voordelen:

  • Snelle initiële prototyping

Nadelen:

  • Moeilijk om toegangsfouten te traceren
  • Frequent bugs door onbedoeld overschrijven van eigenschappen

Positieve case

Alle leden van de klasse zijn zorgvuldig getypeerd, gebruikt private/protected/public, strikte typeclassificatie van eigenschappen en methoden.

Voordelen:

  • Voorkoming van fouten op compileertijd
  • Duidelijke architectuur, gemakkelijk te begrijpen structuur van objecten

Nadelen:

  • Vereist meer tijd voor ontwerp, minder flexibiliteit bij experimentele taken