В чем разница между типами any и unknown в TypeScript?
Базовые типы
`any` отключает проверку типов, `unknown` — безопасный аналог: значение может быть любым, но использовать его можно только после проверки.
any
let value: any = JSON.parse(raw);
value.foo.bar(); // компилируется, упадёт в рантаймеany «заражает» код: всё, что из него получено, тоже становится any.
unknown
let value: unknown = JSON.parse(raw);
value.foo; // ошибка компиляции
if (typeof value === 'object' && value !== null && 'foo' in value) {
// здесь можно работать с value.foo
}К unknown можно присвоить что угодно, но саму переменную нельзя использовать, пока тип не сужен.
Когда что
unknown— для внешних данных,catch (error), параметров «чего угодно».any— только как временная мера при миграции с JavaScript.
Коротко для собеседования
any выключает проверки, unknown требует сузить тип перед использованием; почти всегда выбирают unknown.
Подробнее: TypeScript Handbook — unknown