Sobes.tech
Middle

Կարո՞ղ եք օգտագործել դիսկրիմինանտային միավորումներ և type guards: Ինչպիսի՞ն են ձեր ծանոթը տեղական type guards-ները։

sobes.tech AI

Պատասխան AI-ից

Discriminated unions (ayrımcı birləşmələr) və type guards (tür qoruyucuları) TypeScript-də güclü alətlərdir və birləşmədəki müəyyən bir tipi təhlükəsiz şəkildə müəyyən etməyə imkan verir.

Discriminated unions — hər bir tipin ümumi bir ədədli açarı (məsələn, type sahəsi) olan tiplərdir, bu sayədə konkret tipi dəqiq müəyyən etmək mümkündür.

Type guards — funksiyalar və ya strukturlar, hansı ki, icra zamanı dəyişənin tipini yoxlayır və tərtibçi üçün tipi daraldır.

TypeScript-də daxili olan tip guards:

  • typeof — əsas tiplər üçün (string, number, boolean)
  • instanceof — sinfə aid olub olmadığını yoxlamaq üçün
  • in — obyektə aid xüsusiyyətin olub-olmadığını yoxlamaq üçün

Misal üçün, diskriminativ birləşmə və tip guard nümunəsi:

interface Dördkünc {
  kind: 'square';
  size: number;
}

interface Dairə {
  kind: 'circle';
  radius: number;
}

type Forma = Dördkünc | Dairə;

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

Burada, kind diskriminator və switch tip guard kimi işləyir.

İstifadə edilən daxili tip guards:

function isString(qiymət: unknown): qiymət is string {
  return typeof qiymət === 'string';
}

if (isString(bir şey)) {
  // burada, `bir şey` string tipindədir
}