Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про TypeScript: TypeScript, never type, type inference, exhaustive check

Почему TypeScript может выводить тип never?

Вопрос проверяет понимание системы типов TypeScript и случаев, когда тип never выводится автоматически.

Короткий ответ

Тип never выводится, когда функция никогда не завершается (например, выбрасывает исключение или входит в бесконечный цикл) или когда все возможные варианты объединения типов исчерпаны. Это помогает TypeScript гарантировать, что код корректен, и используется для проверки полноты обработки (exhaustive check).

Длинный ответ

Что такое тип never в TypeScript?

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

Когда выводится never?

  • Функции, которые никогда не завершаются: Если функция всегда выбрасывает исключение или входит в бесконечный цикл, её возвращаемый тип выводится как never.
  • Исчерпывающие проверки (exhaustive checks): При использовании discriminated unions и условных конструкций, когда все возможные варианты обработаны, оставшаяся ветка получает тип never.
  • Пустые массивы с явной типизацией: Если массив объявлен с типом never[], он не может содержать элементы.

Примеры кода

// Функция, выбрасывающая исключение
function throwError(message: string): never {
  throw new Error(message);
}

// Бесконечный цикл
function infiniteLoop(): never {
  while (true) {}
}

// Exhaustive check с discriminated union
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 ** 2;
    default:
      // shape здесь имеет тип never
      const _exhaustive: never = shape;
      return _exhaustive;
  }
}

Практическое применение

Тип never активно используется для обеспечения типобезопасности при работе с объединениями типов. Он помогает разработчику не пропустить обработку нового варианта при расширении типа. Также never применяется в условных типах для фильтрации или исключения определённых типов из объединения.

Вывод

Понимание never необходимо для написания надёжного TypeScript-кода, особенно при работе с сложными типами и discriminated unions. Это мощный инструмент для статического анализа, который помогает избежать ошибок на этапе компиляции.

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • TypeScript

    TypeScript

Ключевые слова

#TypeScript

#never type

#type inference

#exhaustive check

Подпишись на React Developer в телеграм

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию