TypeScript Academy · Les

Discriminated unions voor veilige pattern matching

Voeg een gemeenschappelijk letterlijke veld toe aan unionleden voor typeveiligheid.

Les 3 van 413 stappen

Discriminated unions voor veilige pattern matching is een gratis TypeScript Academy-les op CoddyKit. Dit is les 3 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject TypeScript Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus TypeScript Academy bevat in totaal 4 lessen.

Welkom

Gediscrimineerde unietypen voegen een gedeelde letterlijke eigenschap toe aan de leden van het unietype. TypeScript gebruikt deze discriminator om het type te verfijnen in switch- en if-instructies.

De discriminator-eigenschap

Een discriminator is een eigenschap met een uniek letterlijk type in elk lid van het unietype. TypeScript verfijnt het unietype op basis van de waarde ervan.
type Circle = { kind: 'circle'; radius: number };
type Square = { kind: 'square'; side: number };
type Shape = Circle | Square;

Typeverfijning met if-controles

Controleer de discriminator in een if-instructie. TypeScript verfijnt het type tot het overeenkomende lid.
function area(shape: Shape): number {
  if (shape.kind === 'circle') {
    return Math.PI * shape.radius ** 2;
  }
  return shape.side ** 2; // narrowed to Square
}

Typeverfijning met switch/case

switch-instructies werken uitstekend met gediscrimineerde unietypen. Elke case verfijnt het type tot een specifiek lid.
function describe(shape: Shape): string {
  switch (shape.kind) {
    case 'circle': return `Circle r=${shape.radius}`;
    case 'square': return `Square s=${shape.side}`;
  }
}

Volledigheid controleren met never

Voeg een standaardcase toe die een waarde toewijst aan `never`. Als je een nieuw lid aan het unietype toevoegt en vergeet dit af te handelen, meldt TypeScript een fout.
function area(shape: Shape): number {
  switch (shape.kind) {
    case 'circle': return Math.PI * shape.radius ** 2;
    case 'square': return shape.side ** 2;
    default:
      const _exhaustive: never = shape;
      throw new Error('Unhandled shape');
  }
}

Resultaattypem patroon

Gediscrimineerde unietypen zijn ideaal voor het Result-patroon: succesgegevens of een fout retourneren zonder een fout te gooien.
type Ok<T> = { ok: true; value: T };
type Err = { ok: false; error: string };
type Result<T> = Ok<T> | Err;

Actietypepatroon (Redux-stijl)

In Redux en vergelijkbare systemen zijn acties gediscrimineerde unietypen. Het veld `type` is de discriminator.
type Action =
  | { type: 'INCREMENT'; amount: number }
  | { type: 'DECREMENT'; amount: number }
  | { type: 'RESET' };

Meerdere discriminator-eigenschappen

Een discriminator hoeft niet uit één eigenschap te bestaan: TypeScript kan het type verfijnen op basis van elke combinatie van controles.
type AdminUser = { role: 'admin'; permissions: string[] };
type RegularUser = { role: 'user'; credits: number };
type User = AdminUser | RegularUser;

Niet-gediscrimineerde unietypen worden nog steeds verfijnd

Ook zonder discriminator verfijnt TypeScript unietypen met typeof, instanceof en eigenschapscontroles.
type StringOrArr = string | string[];
function flatten(val: StringOrArr): string[] {
  return Array.isArray(val) ? val : [val];
}

Gediscrimineerde unietypen versus klassenhiërarchieën

Gediscrimineerde unietypen zijn een functioneel alternatief voor overerving tussen klassen bij het modelleren van varianten. Ze zijn eenvoudiger, serialiseerbaar en werken goed met patroonvergelijking.

Uit de praktijk: HTTP-antwoordunietype

Modelleer verschillende API-antwoordtoestanden als een gediscrimineerd unietype.
type ApiState<T> =
  | { status: 'loading' }
  | { status: 'success'; data: T }
  | { status: 'error'; message: string };

Korte controle

Wat moet elk lid van een gediscrimineerd unietype hebben zodat TypeScript het type correct kan verfijnen?

Samenvatting

Gediscrimineerde unietypen gebruiken een gedeelde letterlijke eigenschap als discriminator. Verfijn het type met switch/case en voeg een volledigheidscontrole met `never` toe om niet-afgehandelde gevallen te vinden. Ze zijn ideaal voor toestandsmachines, acties en API-antwoorden.
Gratis beginnen

Leer TypeScript met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
101
Lessen
352

Veelgestelde vragen

Is de les “Discriminated unions voor veilige pattern matching” gratis?

Ja — de volledige tekst van “Discriminated unions voor veilige pattern matching” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus TypeScript Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus TypeScript Academy bevat in totaal 4 lessen.

Wat leer ik in “Discriminated unions voor veilige pattern matching”?

Voeg een gemeenschappelijk letterlijke veld toe aan unionleden voor typeveiligheid. Je oefent met TypeScript Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met TypeScript Academy te beginnen?

Ervaring vooraf is niet nodig. TypeScript Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.

Hoe lang duurt de les “Discriminated unions voor veilige pattern matching”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over TypeScript Academy?

Ja. Elke les over TypeScript Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Uniontypen: A of B
  2. Intersectiontypen: A en B
  3. Discriminated unions voor veilige pattern matching
  4. Praktische patronen met unions en intersections
← Terug naar TypeScript Academy