Sobes.tech
Middle

Vai jums ir bijusi nepieciešamība izmantot diskriminējošās vienības un type guards? Kādus iebūvētos type guards jūs pazīstat?

sobes.tech AI

Atbilde no AI

Discriminated unions (discriminated unions) un type guards (tipu sargi) ir spēcīgi rīki TypeScript, kas ļauj droši noteikt konkrētu tipu apvienībā.

Discriminated unions ir tipu apvienības, kurās katram tipam ir kopīgs literālais atslēgas lauks (piemēram, lauks type), ar kuru var skaidri identificēt konkrētu tipu.

Type guards ir funkcijas vai konstrukcijas, kas pārbauda mainīgā tipu izpildes laikā un sašaurina tipu kompilatoram.

Iekļautie TypeScript tipa sargi:

  • typeof — primitivajiem tipiem (string, number, boolean)
  • instanceof — pārbaudei, vai objekts pieder klasei
  • in — pārbaudei, vai īpašība pastāv objektā

Piemērs diskriminētai apvienībai un tipa sargam:

interface Kvadrāts {
  kind: 'square';
  size: number;
}

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

type Forma = Kvadrāts | Aplis;

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

Šeit kind ir diskriminators, un switch darbojas kā tipa sargs.

Izmantojot iebūvētos tipa sargus:

function irString(vērtība: unknown): vērtība is string {
  return typeof vērtība === 'string';
}

if (irString(kas)) {
  // šeit, `kas` ir string
}