ProgrammatieBackend ontwikkelaar

Wat is generieke types in TypeScript, hoe gebruik je het om generieke functies en klassen te schrijven? Welke valkuilen kunnen zich voordoen?

Slaag voor sollicitatiegesprekken met de Hintsage AI-assistent

Antwoord.

Generics (generieke types) stellen je in staat om generieke code te schrijven die met verschillende types werkt, terwijl de typeveiligheid behouden blijft.

Syntaxis voor gebruik:

function identity<T>(value: T): T { return value; } const x = identity<string>('test'); // T = string

Waar worden ze gebruikt:

  • Generieke functies voor collecties (map, filter, enz.)
  • Klassen (bijvoorbeeld, Repository<Entity>)
  • Interfaces (bijvoorbeeld, API-reactie van een generiek type)

Voorbeeld met typebeperking:

function getFirst<T extends { length: number }>(arr: T): T { return arr[0]; }

Misleidende vraag.

Vraag: Is het verplicht om een specifiek type op te geven bij het aanroepen van een functie met een generieke parameter?

Antwoord:

Niet verplicht. TypeScript kan de types afleiden op basis van de doorgegeven waarden, als dat mogelijk is. Maar soms is het handig om expliciet te zijn, bijvoorbeeld als het type niet duidelijk is uit de waarden of als er meerdere opties zijn.

function identity<T>(value: T): T { return value; } identity(5); // T = number (auto) identity<string>('s'); // T = string (expliciet)

Voorbeelden van echte fouten door gebrek aan kennis over de nuances van het onderwerp.


Verhaal

In een e-commerce project hebben we een generieke repository voor verschillende entiteiten geschreven, maar we zijn het typebeperking vergeten. Daardoor kon elke object in de generieke terechtkomen, en op een gegeven moment hebben we een entiteit opgeslagen met incompatibele velden. De types hebben niet tegen de fout beschermd.


Verhaal

We hebben een generieke functie een array doorgegeven, verwachtend een array met elementtypes te ontvangen. Maar de functie gaf any[], omdat de generieke niet expliciet was opgegeven en TypeScript het type niet kon afleiden. De fout werd pas op productie opgemerkt.


Verhaal

Een beginnende ontwikkelaar creëerde een generieke klasse zonder typebeperking, gebruikte een veld dat niet in alle types aanwezig was. De compiler gaf geen foutmelding, maar bij toegang tot de niet-bestaande eigenschap viel de hele functionaliteit uit.