Sobes.tech
Middle

Használta már diszkrimináns uniókat és type guardokat? Milyen beépített type guardokat ismer?

sobes.tech MI

Válasz az MI-től

Diszkriminált uniók (discriminated unions) és típusvédők (type guards) erőteljes eszközök a TypeScript-ben, amelyek lehetővé teszik egy unió típuson belüli konkrét típus biztonságos meghatározását.

Diszkriminált uniók olyan típusuniók, ahol minden típusnak van egy közös literális kulcsa (például a type mező), amely alapján egyértelműen meghatározható egy adott típus.

Típusvédők (type guards) olyan függvények vagy szerkezetek, amelyek futásidőben ellenőrzik egy változó típusát, és szűkítik a típusát a fordító számára.

A TypeScript beépített típusvédői:

  • typeof — primitív típusokhoz (string, number, boolean)
  • instanceof — osztályhoz tartozás ellenőrzése
  • in — egy tulajdonság meglétének ellenőrzése egy objektumban

Példa diszkriminált unióra és típusvédőre:

interface Négyzet {
  kind: 'square';
  size: number;
}

interface Kör {
  kind: 'circle';
  radius: number;
}

type Forma = Négyzet | Kör;

function terület(forma: Forma): number {
  switch (forma.kind) {
    case 'square':
      return forma.size * forma.size;
    case 'circle':
      return Math.PI * forma.radius ** 2;
  }
}

Itt a kind a diszkriminátor, a switch pedig típusvédőként működik.

A beépített típusvédők használata:

function isString(érték: unknown): érték is string {
  return typeof érték === 'string';
}

if (isString(valami)) {
  // itt, a valami string típusú
}