Когда any допустим в TypeScript и чем его заменить?
Базовые типы
`any` допустим только как осознанная временная мера — там, где тип действительно нельзя или пока некогда описать.
Где any оправдан
- Постепенная миграция с JavaScript — чтобы проект собрался, а типы добавлялись по частям.
- Обход ошибки в чужих типах — локально и с комментарием.
- Очень обобщённые утилиты, где тип выводится снаружи, а внутри без
anyне написать.
Чем заменить
- `unknown` — для любых значений, которые нужно проверить перед использованием.
- Дженерики — когда тип зависит от аргумента:
function first<T>(items: T[]): T | undefined {
return items[0];
}- Конкретные типы и union — если варианты известны.
- `Record<string, unknown>` — для произвольных объектов.
- Валидация (zod) с выводом типа — для данных из API.
Как держать под контролем
Правило @typescript-eslint/no-explicit-any и strict в tsconfig подсвечивают каждый any.
Коротко для собеседования
any — временная мера при миграции или обходе чужих типов; обычно его заменяют на unknown, дженерики или конкретные типы.
Подробнее: typescript-eslint — no-explicit-any