Что такое утверждение типа (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.