any говорит компилятору «доверяй мне» и отключает проверки: можно вызывать несуществующие методы, ошибка в runtime, плюс тип заразен. unknown принимает любое значение, но ничего нельзя сделать, пока не докажете тип через typeof, instanceof или валидатор.
Разбор
any: checking off, ошибка уезжает в runtime, дыра расползается.
unknown: «безопасный any» — принять можно, использовать только после narrowing.
- Типичные места для
unknown: API responses, JSON.parse, catch.
Как ответить на собеседовании
«Для внешних данных предпочитаю unknown — он заставляет явно обработать случай вместо того, чтобы спрятать его под any.»
Итог
any — отказ от проверки; unknown — обязательное сужение; для boundary data — всегда unknown + validate.