Полнота проверок с 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 — локальная установка не требуется.
Все уроки этого курса
- Сужение типов с помощью typeof, равенства и истинности
- in, instanceof и дискриминированные объединения
- Полнота проверок с never (введение)