Какой синтаксис у Type Guard

«Какой синтаксис у Type Guard» — вопрос из категории TypeScript, который задают на 10% собеседований Frontend Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Type Guard в TypeScript - это способ сужения типа переменной внутри блока кода. Основные синтаксисы:

  1. typeof для примитивов:
if (typeof value === 'string') {
  // value теперь string
}
  1. instanceof для классов:
if (error instanceof Error) {
  // error теперь тип Error
}
  1. Пользовательские type guards (функции с предикатом):
function isFish(pet: Fish | Bird): pet is Fish {
  return (pet as Fish).swim !== undefined;
}

if (isFish(pet)) {
  pet.swim(); // TypeScript знает, что pet - Fish
}
  1. Проверка свойств (in operator):
if ('swim' in animal) {
  // animal имеет свойство swim
}

Type Guards особенно полезны при работе с union типами, помогая TypeScript корректно определить тип в runtime.