Sobes.tech
Middle

Musel jste někdy použít diskriminační unie a type guards? Jaké vestavěné type guards znáte?

sobes.tech AI

Odpověď od AI

Diskriminační unie (discriminated unions) a typové strážci (type guards) jsou výkonné nástroje TypeScriptu pro práci s unijními typy, které umožňují bezpečně určit konkrétní typ v rámci unie.

Diskriminační unie jsou unijní typy, kde každý typ má společný literální klíč (například pole type), podle kterého lze jednoznačně určit konkrétní typ.

Typové strážce (type guards) jsou funkce nebo konstrukce, které kontrolují typ proměnné za běhu a zužují jej pro kompilátor.

Vestavěné typové strážce v TypeScriptu:

  • typeof — pro primitivní typy (string, number, boolean)
  • instanceof — pro kontrolu příslušnosti ke třídě
  • in — pro kontrolu existence vlastnosti v objektu

Příklad diskriminační unie a typového strážce:

interface Čtverec {
  kind: 'square';
  size: number;
}

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

type Tvar = Čtverec | Kruh;

function plocha(tvar: Tvar): number {
  switch (tvar.kind) {
    case 'square':
      return tvar.size * tvar.size;
    case 'circle':
      return Math.PI * tvar.radius ** 2;
  }
}

Zde je kind diskriminátor a switch funguje jako typový strážce.

Použití vestavěných typových strážců:

function jeString(hodnota: unknown): hodnota is string {
  return typeof hodnota === 'string';
}

if (jeString něcо) {
  // zde je `něcо` typu string
}