Sobes.tech
Middle

დაგჭირვებიათ ოდესმე გამოიყენოთ დისკრიმინანტული ერთეულები და type guards? რა შიდა type guards-ებს იცნობთ?

sobes.tech AI

პასუხი AI-სგან

Discriminated unions (ayrımcı birleştirmeler) ve type guards (tür koruyucuları) 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
}