Почему any вреден
Вопрос
Почему any считают вредным и чем его заменить?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
`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 ошибок.