> Что такое типы any и unknown в TypeScript (TypeScript)
Уровень: junior · Роль: frontend · Категория: Технические вопросы
Компании: Иннотех, Инрэко, Kvando Technologies, Soft_Media_Group, ООО Премиум ИТ Солюшен, IT-One, Swetec, ПСБ, EdenAI, Арго, HolyWeb, SmartWay, Altenar
Стек: TypeScript
> Пример ответа
Короткий ответ
any и unknown - это два типа в TypeScript, которые могут содержать любое значение. any отключает проверку типов полностью, позволяя любые операции без ошибок компиляции. unknown - типобезопасная альтернатива: перед использованием значения нужно явно проверить его тип или выполнить приведение. unknown лучше использовать, когда тип заранее неизвестен, но хочется сохранить строгость проверок.
Подробное объяснение
any - это escape hatch из системы типов. При присвоении значения типа any переменной, TypeScript не проверяет, какие методы или свойства к ней применяются. Это удобно для быстрого прототипирования или миграции с JavaScript, но лишает преимуществ статической типизации - ошибки могут проявиться только в runtime.
unknown - это строгий any. Переменная типа unknown может хранить любое значение, но для работы с ней требуется сузить тип через проверки (type guards), приведение (type assertion) или анализ структуры. Компилятор не позволит вызывать методы, обращаться к свойствам или выполнять арифметические операции без явного подтверждения типа.
Ключевое различие: any разрешает всё, unknown требует доказательств. unknown предпочтительнее при работе с данными из внешних источников (API, пользовательский ввод, JSON.parse), когда тип неизвестен заранее, но нужна безопасность.
На практике
- Используйте
anyтолько в крайних случаях: при миграции JS-кода, для быстрых прототипов, или когда тип действительно невозможно описать (редкие edge cases). - Отдавайте предпочтение
unknownдля значений, тип которых не определён на этапе компиляции. Это заставляет явно обрабатывать разные сценарии и предотвращает случайные ошибки. - Для сужения
unknownприменяйтеtypeof,instanceof, пользовательские type guards илиas(type assertion) после проверки. - Вместо
anyв generic-функциях используйтеunknownили обобщённые типы с ограничениями.
Пример кода
TYPESCRIPT// any - нет проверокlet dataAny: any = 'hello';dataAny.toUpperCase(); // OKdataAny = 42;dataAny.toFixed(); // OK, хотя строка не имеет toFixed// unknown - требует проверкиlet dataUnknown: unknown = 'hello';// dataUnknown.toUpperCase(); // Ошибка: Object is of type 'unknown'// Правильно: сужаем типif (typeof dataUnknown === 'string') {dataUnknown.toUpperCase(); // OK}// Пример с JSON.parseconst jsonData: unknown = JSON.parse('{"name": "Alice"}');// jsonData.name; // Ошибкаif (typeof jsonData === 'object' && jsonData !== null) {const obj = jsonData as { name: string };console.log(obj.name); // OK после приведения}
Как отвечать на собеседовании
Начните с краткого определения обоих типов. Подчеркните, что any отключает проверку типов, а unknown - безопасная альтернатива. Объясните разницу на примере: с any можно вызвать любой метод без ошибки компиляции, с unknown нужно сначала проверить тип. Упомяните, что unknown предпочтительнее для данных извне. Приведите простой пример с typeof или as. Не углубляйтесь в сложные сценарии - для junior достаточно базового понимания.
Что проверяет интервьюер
- Понимание системы типов TypeScript и разницы между
anyиunknown. - Знание, когда какой тип применять (безопасность vs удобство).
- Умение сужать
unknownс помощью type guards. - Осознание рисков использования
anyв production-коде.
Типичные ошибки
- Утверждение, что
anyиunknown- одно и то же. - Использование
anyпо умолчанию для всех неизвестных значений. - Попытка работать с
unknownбез проверки типа (вызов методов напрямую). - Забывание, что
nullиundefinedтоже могут бытьunknown, и проверка наnullобязательна при работе с объектами.
> Похожие задачи по frontend
Почему проверка типа через instanceof не работает с интерфейсами в TypeScript
Что может быть неправильно в решении функции для вычисления площади фигур с использованием типов и интерфейсов TypeScript
Как сделать функцию getProperty с типизацией и проверкой ключей в TypeScript?
Что такое интерфейсы и типы в TypeScript, для чего они нужны и чем отличаются?
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью