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

Voorwaardelijke typen en afleiden

Met voorwaardelijke typen kunt u niet-triviale typebeslissingen uitdrukken op basis van overervingsrelaties. De syntaxis lijkt op de ternaire operator van JavaScript:

TS
T extends U ? X : Y

Als type T kan worden toegewezen aan U, zal het resulterende type X zijn, anders zal het Y zijn.


Basis voorwaardelijke typen

Een voorwaardelijk type evalueert een voorwaarde tijdens het compileren:

TS
type IsNumber<T> = T extends number ? true : false;

type A = IsNumber<number>; // true
type B = IsNumber<string>; // false

Dit patroon is buitengewoon krachtig wanneer het wordt gecombineerd met generieke geneesmiddelen om flexibele en dynamische typen nutsvoorzieningen te creëren.


Type-extractie met infer

Binnen de extends clausule van een voorwaardelijk type kunnen we het sleutelwoord infer gebruiken om een ​​typevariabele te declareren die door de compiler moet worden afgeleid.

Als we bijvoorbeeld het retourtype van een functie willen extraheren:

TS
type GetReturnType<T> = T extends (...args: any[]) => infer R ? R : never;

type ExampleFunction = () => string;
type Return = GetReturnType<ExampleFunction>; // string

In dit voorbeeld vertelt infer R TypeScript om automatisch het retourtype van de functie te bepalen en dit beschikbaar te maken als R in de positieve tak van de voorwaardelijke.


Probeer het zelf

Oefening 1: Het type IsString

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

Maak een algemeen type met de naam IsString<T> dat het letterlijke type true retourneert als T de string verlengt, anders false.

Editor laden…
Toon hint

Gebruik het syntaxistype IsString<T> = T breidt string uit? waar: onwaar; om het type te controleren.

Oplossing beschikbaar na 3 pogingen

Oefening 2: Een type uit een array extraheren met infer

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

Definieer een algemeen type UnpackArray<T> dat infer gebruikt om het elementtype van een array T te extraheren. Als T een array is (bijvoorbeeld U[]), retourneert u U, en retourneert u anders hetzelfde type T.

Editor laden…
Toon hint

Gebruik T verlengt (afleiden U)[] ? U: T om de afgeleide typevariabele U te declareren en terug te geven.

Oplossing beschikbaar na 3 pogingen