TypeScript voorwaardelijke typen

Voorwaardelijke typen in TypeScript bieden een manier om typen te maken die afhankelijk zijn van een voorwaarde. Ze bieden meer flexibiliteit en expressiviteit in typedefinities, waardoor het mogelijk is om complexe typerelaties op een duidelijke en beknopte manier te modelleren. Dit artikel onderzoekt hoe voorwaardelijke typen werken in TypeScript en geeft voorbeelden om hun gebruik te illustreren.

Wat zijn voorwaardelijke typen?

Voorwaardelijke typen maken het mogelijk om typen te maken die worden geselecteerd op basis van een voorwaarde. Ze lijken op voorwaardelijke statements in programmeren, maar werken op typeniveau. De basissyntaxis van een voorwaardelijk type is:

type ConditionalType = T extends U ? X : Y;

In deze syntaxis:

  • T is het type dat wordt gecontroleerd.
  • U is het type waarmee we moeten vergelijken.
  • X is het type dat wordt geretourneerd als TU uitbreidt.
  • Y is het type dat wordt geretourneerd als T niet U uitbreidt.

Basisvoorbeeld van voorwaardelijke typen

Hier is een eenvoudig voorbeeld van een voorwaardelijk type dat verschillende typen retourneert, afhankelijk van of een bepaald type een tekenreeks is of niet:

type IsString = T extends string ? "String" : "Not a string";

type Result1 = IsString;  // Result1 is "String"
type Result2 = IsString;  // Result2 is "Not a string"

In dit voorbeeld controleert IsString of Tstring uitbreidt. Als dat zo is, is het resultaat "String"; anders is het "Not a string".

Voorwaardelijke typen gebruiken met generieke typen

Voorwaardelijke typen kunnen ook worden gebruikt met generieke typen om flexibelere en herbruikbare typedefinities te maken. Bijvoorbeeld een type dat het retourtype van een functie extraheert:

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

type FunctionType = (x: number) => string;

type Result = ReturnType;  // Result is string

In dit voorbeeld gebruikt ReturnType het trefwoord infer om het retourtype R van het functietype T af te leiden. Als T een functietype is, is ReturnType het retourtype; anders is de standaardwaarde never.

Voorwaardelijke typen met verenigingstypen

Voorwaardelijke typen kunnen ook met union-typen werken om meerdere mogelijke typen te verwerken. Bijvoorbeeld, onderscheid maken tussen verschillende union-leden:

type ExtractString = T extends string ? T : never;

type UnionType = string | number | boolean;

type Result = ExtractString;  // Result is string

In dit voorbeeld extraheert ExtractStringstring uit een union-type UnionType, wat resulteert in string.

Voorwaardelijke typen met typetoewijzingen

Voorwaardelijke typen kunnen worden gecombineerd met typetoewijzingen om complexere typetransformaties te creëren. Bijvoorbeeld, toewijzing over een array van typen om een ​​voorwaardelijk type toe te passen:

type MapArray = {
  [K in keyof T]: T[K] extends string ? T[K] : never;
};

type ArrayType = [string, number, boolean];

type MappedArray = MapArray;  // MappedArray is [string, never, never]

In dit voorbeeld wordt MapArray toegewezen aan elk element van de array T en wordt een voorwaardelijk type op elk element toegepast. Dit resulteert in een array waarin alleen tekenreekselementen worden bewaard.

Conclusie

Voorwaardelijke typen in TypeScript zijn een krachtig hulpmiddel voor het maken van flexibele en expressieve typedefinities. Door voorwaardelijke typen te benutten, kunnen ontwikkelaars complexe typerelaties modelleren, verschillende scenario's afhandelen en de typeveiligheid in hun TypeScript-code verbeteren. Begrijpen hoe u voorwaardelijke typen effectief kunt gebruiken, kan de mogelijkheid om robuuste en onderhoudbare TypeScript-code te schrijven aanzienlijk verbeteren.