Direct naar de hoofdinhoud
Module 6 · Les 2 van 212/14 in de cursus~15 min
Modulelessen (2/2)

In kaart gebrachte typen

Met toegewezen typen kunt u nieuwe typen maken door de eigenschappen van bestaande typen één voor één te transformeren. Ze zijn gebouwd bovenop de lussyntaxis over sleutels met behulp van de operator keyof.

TS
type Mapped<T> = {
  [P in keyof T]: T[P];
};

Dit voorbeeld toont een toegewezen type dat identiek is aan het originele type: het herhaalt zich over elke sleutel P in keyof T en wijst hetzelfde type T[P] toe.


Mutabiliteits- en optioneelheidsmodificatoren

We kunnen modifiers zoals readonly en ? (optioneel) toevoegen of verwijderen door ze te laten voorafgaan door + (toevoegen, standaard) of - (verwijderen).

Om bijvoorbeeld de optionele mogelijkheden van alle eigenschappen van een type te verwijderen (waardoor ze verplicht worden):

TS
type Concrete<T> = {
  [P in keyof T]-?: T[P];
};

De modifier -? verwijdert de optionele vlag van elke eigenschap.


Sleutel opnieuw toewijzen met as

In TypeScript 4.1+ kunt u sleutels in een toegewezen type opnieuw toewijzen met behulp van de as-clausule en letterlijke sjabloontypen.

TS
type WriteSetters<T> = {
  [K in keyof T as `set${Capitalize<string & K>}`]: (value: T[K]) => void;
};

Hier veranderen we de naam van elke eigenschap K in set[CapitalizedKey] en wijzigen we het type in een setterfunctie.


Probeer het zelf

Oefening 1: Eigenschappen nulleerbaar maken

Oefening#ts.m6.l2.e1
Pogingen: 0Laden…

Declareer een generiek toegewezen type Nullable<T> dat een object T neemt en elke eigenschap transformeert zodat het ook de waarde null kan accepteren (bijvoorbeeld T[K] | null).

Editor laden…
Toon hint

Gebruik de syntaxis [K in toonsoort van T]: T[K] | nul; binnen het toegewezen typeobject.

Oplossing beschikbaar na 3 pogingen

Oefening 2: Dynamische getters genereren met as

Oefening#ts.m6.l2.e2
Pogingen: 0Laden…

Maak een toegewezen type met de naam GetterNames<T> dat de sleutels van het object T transformeert door ze te laten voorafgaan door 'get' en de originele sleutel in hoofdletters te schrijven (gebruik Hoofdlettergebruik). Als een sleutel bijvoorbeeld naam is, moet deze getName worden. Stel het type van de eigenschappen in op () => T[K].

Editor laden…
Toon hint

Gebruik als \`get\${Capitalize<string & K>}\` om de sleutel opnieuw toe te wijzen en () => T[K] als het retourneringstype van de eigenschap.

Oplossing beschikbaar na 3 pogingen