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:
T extends U ? X : YAls 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:
type IsNumber<T> = T extends number ? true : false;
type A = IsNumber<number>; // true
type B = IsNumber<string>; // falseDit 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:
type GetReturnType<T> = T extends (...args: any[]) => infer R ? R : never;
type ExampleFunction = () => string;
type Return = GetReturnType<ExampleFunction>; // stringIn 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
Maak een algemeen type met de naam IsString<T> dat het letterlijke type true retourneert als T de string verlengt, anders false.
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
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.
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