Ответ вслух Junior Базовые типы спрашивают часто обновлено

Почему any вреден

Вопрос

Почему any считают вредным и чем его заменить?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

any отключает систему типов: значение такого типа можно использовать как угодно и передать куда угодно, компилятор молчит. Хуже того, он расползается: data.user.name на any тоже any, и ошибка проявится в рантайме далеко от места, где её внесли.

Что должно прозвучать в ответе

  • `any` выключает проверку в обе стороны: на нём можно вызвать что угодно и присвоить его куда угодно

  • `any` заразен: свойства и результаты вызовов на нём тоже `any`, ошибка уходит далеко от источника

  • Замена для неизвестных данных: `unknown` с сужением или валидацией

  • Замена для «любого, но одного и того же»: дженерик

  • Защита: `noImplicitAny` в strict и правило линтера `no-explicit-any`

Что могут спросить следом

  • Где any появляется неявно?
  • Когда any всё же оправдан?

Разбор

any отключает систему типов: значение такого типа можно использовать как угодно и передать куда угодно, компилятор молчит. Хуже того, он расползается: data.user.name на any тоже any, и ошибка проявится в рантайме далеко от места, где её внесли. Неявно any приходит из JSON.parse, из response.json(), из библиотек без типов и из параметров без аннотаций, если выключен noImplicitAny. Заменяю так: для данных извне unknown плюс проверка или схема (zod), для обобщённого кода дженерик, для «объекта с любыми ключами» Record<string, unknown>. Оправдан any в редких местах, например в типовых утилитах вроде (...args: any[]) => any или при постепенной миграции с JS, и тогда это видно в ревью.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.