PassFront
  1. PassFront
  2. База знаний
  3. Базовые типы

В чем разница между типами 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

Другие вопросы раздела