PassFront
  1. PassFront
  2. База знаний
  3. Продвинутые темы

Что такое never?

Продвинутые темы

`never` — это тип TypeScript, обозначающий значения, которых никогда не бывает. Он описывает функции, которые не возвращают управление, и невозможные состояния.

Где появляется never

Функция, которая никогда не возвращается

function throwError(msg: string): never {
  throw new Error(msg); // не возвращает управление
}

function infiniteLoop(): never {
  while (true) {}
}

Невозможный тип

never — результат сужения, когда не осталось вариантов:

function check(x: string | number) {
  if (typeof x === 'string') return;
  if (typeof x === 'number') return;
  x; // тип never — сюда не дойти
}

Применение — проверка полноты (exhaustiveness)

never гарантирует, что обработаны все варианты union:

type Shape = 'circle' | 'square';
function area(s: Shape) {
  switch (s) {
    case 'circle': return 1;
    case 'square': return 2;
    default:
      const _exhaustive: never = s; // ошибка, если добавили новый Shape
      return _exhaustive;
  }
}

never против void

  • void — функция возвращает управление, но без значения (undefined).
  • never — функция не возвращает управление вовсе (throw/бесконечный цикл).

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

never — тип значений, которых не бывает: функции, не возвращающие управление (throw, бесконечный цикл), и невозможные ветки после сужения. Используется для проверки полноты union (exhaustiveness check). Отличается от void: void — нет значения, never — нет возврата вообще.

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