PassFront
  1. PassFront
  2. База знаний
  3. Продвинутые темы

Что такое Type Guard?

Продвинутые темы

Type Guard (защитник типа) — это выражение или функция в TypeScript, которое сужает тип переменной внутри блока кода, позволяя компилятору понять её конкретный тип.

Зачем нужен

При union-типах нужно «сузить» тип, чтобы безопасно работать с конкретным вариантом.

Встроенные type guards

function print(value: string | number) {
  if (typeof value === 'string') {
    value.toUpperCase(); // здесь value: string
  } else {
    value.toFixed(2);    // здесь value: number
  }
}
  • typeof — для примитивов.
  • instanceof — для классов.
  • in — проверка наличия свойства.
  • Проверка на null/undefined, литеральные сравнения.

Пользовательский type guard

Функция с возвращаемым типом value is Type:

interface Cat { meow(): void }
interface Dog { bark(): void }

function isCat(pet: Cat | Dog): pet is Cat {
  return 'meow' in pet;
}

if (isCat(pet)) pet.meow(); // pet сужен до Cat

Discriminated unions

Общее поле-дискриминатор (type/kind) позволяет сужать по switch.

Коротко для собеседования

Type Guard сужает union-тип до конкретного: встроенные (typeof, instanceof, in, проверки на null) и пользовательские функции с предикатом value is Type. Позволяет компилятору безопасно работать с нужным вариантом типа.

Другие вопросы раздела