Проверяет понимание рисков типа any в TypeScript и умение выбирать безопасные альтернативы для нетипизированных данных.
Тип any в TypeScript полностью отключает проверку типов для значения. Компилятор перестаёт отслеживать, что с этим значением делают, и любые операции над ним считаются допустимыми. Это удобно для быстрого прототипа, но в реальном коде приводит к ошибкам, которые всплывают только в рантайме, и ломает автодополнение в редакторе.
Если точный тип неизвестен, используйте unknown. Он принимает любое значение, но не позволяет с ним работать без предварительной проверки. Это заставляет явно сузить тип через type guard.
function parse(input: unknown) {
if (typeof input === 'string') {
return input.toUpperCase(); // здесь input: string
}
if (Array.isArray(input)) {
return input.length; // здесь input: unknown[]
}
throw new Error('Unsupported type');
}
Для коллекций и переиспользуемых функций лучше подходят generics. Они сохраняют связь между входом и выходом и не теряют информацию о типе.
function first<T>(items: T[]): T | undefined {
return items[0];
}
const n = first([1, 2, 3]); // number | undefined
Когда набор вариантов известен, применяйте union-типы и discriminated unions. Это даёт точное сужение через switch или проверку поля-дискриминанта.
type Result =
| { status: 'ok'; data: string }
| { status: 'error'; message: string };
function handle(r: Result) {
if (r.status === 'ok') return r.data;
return r.message;
}
Итог: any стоит использовать только как временную заглушку при миграции. Для внешних данных берите unknown, для обобщённых функций — generics, для известных вариантов — union-типы. Так вы сохраняете проверку типов и получаете подсказки IDE.
Уровень
Рейтинг:
5
Сложность:
4
Навыки
JavaScript
TypeScript
Ключевые слова
Подпишись на React Developer в телеграм
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию