Проверяет понимание type assertion в TypeScript: когда он оправдан, а когда скрывает ошибки типизации и ломает безопасность.
Type assertion — это способ сообщить компилятору TypeScript, что значение имеет конкретный тип, даже если вывод типов говорит иначе. Синтаксис value as Type или устаревший <Type>value не выполняет никаких проверок во время выполнения: он лишь отключает часть проверок компилятора. Поэтому assertion одновременно и удобен, и опасен.
document.getElementById возвращает HTMLElement | null, а вы точно знаете, что это HTMLInputElement.typeof, instanceof, in) — это безопаснее.as unknown as T — почти всегда признак плохого дизайна типов.// Плохо: assertion скрывает возможную ошибку
function getLength(value: unknown) {
return (value as string).length; // упадёт, если придёт число
}
// Хорошо: type guard делает код безопасным
function getLengthSafe(value: unknown) {
if (typeof value === 'string') return value.length;
return 0;
}
// Оправданный assertion: DOM гарантированно input
const el = document.getElementById('name') as HTMLInputElement;
el.value = 'Ivan';
Итог: применяйте type assertion только там, где тип действительно известен из внешнего контекста и проверка невозможна, а во всех остальных случаях предпочитайте type guards, generics и корректные типы — это сохраняет безопасность типов и предотвращает ошибки в рантайме.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию