Зачем нужен тип never?

🎯 Зачем спрашивают
  • Проверяют знание системы типов TS и умение отличать never от void и any.
  • Хотят понять, знаком ли кандидат с приёмами типа «исчерпывающий switch/case».
  • Проверяют умение использовать TS для ловли ошибок на этапе компиляции.
 
📝 Ответ
never — это "тип невозможности".
Он нужен для:
  • функций, которые не завершаются
  • проверки полноты (exhaustiveness checking)
  • уточнения и защиты от ошибок в типах.
 
Функции, которые никогда не возвращают результат
function fail(message: string): never { throw new Error(message); }
Тип never показывает, что выполнение этой функции никогда не завершится успешно.
 
Проверка исчерпывающего switch/case
function assertNever(x: never): never { throw new Error(`Unreachable case: ${JSON.stringify(x)}`); } type Shape = | { kind: "circle"; radius: number } | { kind: "square"; side: number }; function area(shape: Shape): number { switch (shape.kind) { case "circle": return Math.PI * shape.radius ** 2; case "square": return shape.side * shape.side; default: // если добавим новый вариант в Shape и не обработаем его выше — // здесь будет ошибка типов (shape не сужается до never) return assertNever(shape); } }
Если добавить новый вариант в Shape, TypeScript подсветит ошибку в default. Это защищает от забытых кейсов.
 
Тип never как результат "невозможных" пересечений
// never, потому что строка не может быть одновременно "a" и "b" type A = "a" & "b"; // never, потому что переменная не может быть одновременно иметь тип и строки, и числа type B = string & number;
 
⚖️ Компромиссы
  • ✅ Плюсы: помогает ловить ошибки ещё на этапе разработки; делает код более надёжным.
  • ❌ Минусы: иногда путают с void → может вносить путаницу в команду.
 
🔎 Встречные вопросы
  • Чем отличается never от void и any?
  • В каких случаях never возникает «автоматически» (неявно)?
  • Можно ли использовать never в generic-коде (например, для условных типов)?
 
🚩 Красные флаги
  • never = это то же самое, что void.
  • Используется только для throw.
  • Не знает про исчерпывающие проверки.
 
🛠 Практика
 
📚 Источники / ссылки