PassFront
  1. PassFront
  2. База знаний
  3. Основы TypeScript

Что такое утверждение типа (type assertion) в TypeScript?

Основы TypeScript

Type assertion — способ сказать компилятору, что вы знаете тип значения лучше него. Синтаксис value as Type. Это только подсказка для проверки типов: в рантайме ничего не происходит и значение не преобразуется.

const input = document.getElementById('name') as HTMLInputElement;
input.value = 'Ann';

const data = JSON.parse(text) as { id: number };

Что важно

  • Нет проверки в рантайме. Если вы ошиблись, ошибка проявится позже.
  • Можно утверждать только совместимые типы: 'a' as number — ошибка. Обход через as unknown as T — это отключение проверки, нужно избегать.
  • Старая форма <Type>value не работает в JSX/TSX.
  • Постфиксный ! (non-null assertion) — частный случай: el!.focus() убирает null | undefined.

Когда уместно

  • Результат DOM-запроса, где вы точно знаете тип элемента.
  • Данные из внешнего источника, если типы заданы вручную (лучше валидировать).
  • Сужение типа, о котором TS не знает.

Чем заменить

  • Type guards и typeof/instanceof/in — безопасное сужение.
  • Валидация (zod, io-ts) для данных из сети.
  • Оператор satisfies — проверка без изменения типа.

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

as — указание типа компилятору без проверки в рантайме. Допустимо для DOM и внешних данных, но безопаснее использовать type guards и валидацию, чем утверждения и as unknown as.

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