Sobes.tech
Middle

Heeft u ooit discriminante unies en type guards gebruikt? Welke ingebouwde type guards kent u?

sobes.tech AI

Antwoord van AI

Discriminated unions (discriminated unions) en type guards (type guards) zijn krachtige tools van TypeScript voor het werken met unietypen, waarmee je veilig een specifiek type binnen de unie kunt bepalen.

Discriminated unions zijn unietypen waarbij elk type een gemeenschappelijke letterlijke sleutel heeft (bijvoorbeeld het veld type), waarmee je een specifiek type eenduidig kunt identificeren.

Type guards zijn functies of constructies die het type van een variabele tijdens runtime controleren en het type voor de compiler beperken.

Ingebouwde type guards in TypeScript:

  • typeof — voor primitieve types (string, number, boolean)
  • instanceof — om te controleren of een object tot een klasse behoort
  • in — om te controleren of een eigenschap in een object bestaat

Voorbeeld van een discriminated union en een type guard:

interface Vierkant {
  kind: 'square';
  size: number;
}

interface Cirkel {
  kind: 'circle';
  radius: number;
}

type Vormen = Vierkant | Cirkel;

function oppervlakte(vorm: Vormen): number {
  switch (vorm.kind) {
    case 'square':
      return vorm.size * vorm.size;
    case 'circle':
      return Math.PI * vorm.radius ** 2;
  }
}

Hier is kind de discriminant, en switch fungeert als een type guard.

Gebruik van ingebouwde type guards:

function isString(waarde: unknown): waarde is string {
  return typeof waarde === 'string';
}

if (isString(iets)) {
  // hier is `iets` van type string
}