0Pricing
TypeScript Academy · Урок

Полнота проверок с never (введение)

Используйте never, чтобы требовать обработки всех вариантов в switch по объединениям и заранее обнаруживать пропущенные случаи.

«Полнота проверок с never (введение)» — бесплатный урок TypeScript Academy на CoddyKit. Это урок 3 из 3. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения TypeScript Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс TypeScript Academy содержит 3 уроков всего.

Введение

Цель: убедиться, что оператор выбора обрабатывает все элементы объединения. Тип never помогает компилятору сообщить о пропущенном новом случае.

Настройка объединения

Создайте размеченное объединение с литеральной меткой (например, kind), по которой позже будет выполняться выбор ветви.

type Circle = { kind: "circle"; radius: number };
type Square = { kind: "square"; size: number };

type Shape = Circle | Square;

Неполный оператор выбора

Пропущенная ветвь не мешает компиляции, но логика остаётся неполной. Нужен способ вызвать ошибку во время компиляции, если случай пропущен.

function areaBad(s: Shape): number {
  switch (s.kind) {
    case "circle":
      return Math.PI * s.radius ** 2;
    // OOPS: forgot "square" -> no compile error yet
  }
  return 0; // silently wrong
}

console.log(areaBad({ kind: "circle", radius: 2 }));

Вспомогательная функция assertNever

Определите assertNever: она принимает только never. Если до неё доходит значение, оператор выбора был неполным, и компилятор сообщит об этом.

function assertNever(x: never): never {
  throw new Error("Unhandled case: " + JSON.stringify(x));
}

Полный оператор выбора

Добавьте ветвь по умолчанию, вызывающую assertNever. Когда появляется новый элемент объединения, компилятор заставляет обработать его.

function area(s: Shape): number {
  switch (s.kind) {
    case "circle":
      return Math.PI * s.radius ** 2;
    case "square":
      return s.size * s.size;
    default:
      return assertNever(s); // compiler error if a member is unhandled
  }
}

console.log(area({ kind: "square", size: 3 }));

Рекомендации

Рекомендации:

  • Используйте различительный признак (например, kind) у элементов объединения.
  • Сохраняйте шаблон по умолчанию + assertNever.
  • Отдавайте предпочтение понятным возвращаемым типам, чтобы пропущенные случаи были очевидны.

Проверка полноты

Быстрая проверка: как сделать оператор выбора по размеченному объединению полным?

Итоги

Итоги: never обозначает невозможное значение. Используйте assertNever в ветви по умолчанию, чтобы обеспечить полный и устойчивый к будущим изменениям оператор выбора.

Часто задаваемые вопросы

Урок «Полнота проверок с never (введение)» бесплатный?

Да — полный текст урока «Полнота проверок с never (введение)» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс TypeScript Academy, подпишись на CoddyKit PRO. Курс TypeScript Academy содержит 3 уроков всего.

Чему я научусь в уроке «Полнота проверок с never (введение)»?

Используйте never, чтобы требовать обработки всех вариантов в switch по объединениям и заранее обнаруживать пропущенные случаи. Ты практикуешь TypeScript Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать TypeScript Academy?

Предыдущий опыт не требуется. TypeScript Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 3.

Сколько времени занимает урок «Полнота проверок с never (введение)»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке TypeScript Academy?

Да. Каждый урок TypeScript Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Сужение типов с помощью typeof, равенства и истинности
  2. in, instanceof и дискриминированные объединения
  3. Полнота проверок с never (введение)
← Назад к TypeScript Academy