PassFront
  1. PassFront
  2. База знаний
  3. Type Narrowing и Guards

Чем отличаются unknown, any и never и как они связаны с сужением типов?

Type Narrowing и Guards

`any` отключает проверку типов, `unknown` — безопасный «неизвестный» тип, а `never` — тип значения, которого не бывает.

any

Позволяет делать что угодно: вызывать методы, читать свойства. Ошибки появятся только во время выполнения.

unknown

Принимает любое значение, но использовать его можно, только сузив тип проверкой:

function parse(input: unknown) {
  if (typeof input === 'string') return input.trim();
  if (Array.isArray(input)) return input.length;
  throw new Error('Unsupported input');
}

Подходит для данных из JSON.parse, ответов API и блока catch.

never

  • Тип функции, которая никогда не завершается (бросает ошибку или бесконечный цикл).
  • Остаток в исчерпывающей проверке union.
  • Результат пересечения несовместимых типов.

Правило

Вместо any лучше unknown и явное сужение: так компилятор заставляет проверить данные.

Коротко для собеседования

any ломает типизацию, unknown требует проверки перед использованием, never обозначает невозможное значение и помогает проверять полноту.

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