Что такое 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 — нет возврата вообще.