← Назад к вопросам

Для чего используется never в TypeScript?

2.0 Middle🔥 221 комментариев
#JavaScript Core#TypeScript

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI2 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Тип never в TypeScript

never — это специальный тип в TypeScript, который означает, что значение никогда не будет существовать. Это самый узкий тип в системе типов TypeScript. Используется в нескольких ключевых сценариях.

Основное предназначение

never используется для:

  1. Обозначения функций, которые никогда не возвращаются
  2. Недостижимого кода
  3. Исчерпывающей проверки типов (exhaustive checks)
  4. Обозначения пустого типа (особенно в типовых функциях)

Сценарий 1: Функции, которые никогда не возвращаются

function throwError(message: string): never {
  throw new Error(message);
}

function infiniteLoop(): never {
  while (true) {
    // ...
  }
}

const user = getUserFromAPI();
if (!user) {
  throwError("User not found");
}
console.log(user.name);

Типизация таких функций помогает TypeScript понимать control flow и избегать потенциальных ошибок.

Сценарий 2: Исчерпывающая проверка типов

Это критически важно при работе с union types и discriminated unions:

type Status = "loading" | "success" | "error";

function handleStatus(status: Status): string {
  switch (status) {
    case "loading":
      return "Loading...";
    case "success":
      return "Success!";
    case "error":
      return "Error";
    default:
      const exhaustiveCheck: never = status;
      return exhaustiveCheck;
  }
}

Если позже добавить новый статус в union, TypeScript сразу укажет на ошибку в switch, заставляя обработать новый case.

Сценарий 3: Недостижимый код

function getStatusMessage(code: number): string {
  if (code === 200) {
    return "OK";
  }
  if (code === 404) {
    return "Not Found";
  }
  const exhaustive: never = code;
  return exhaustive;
}

Сценарий 4: Типовые функции и условные типы

type NonNullable<T> = T extends null | undefined ? never : T;

type Example = NonNullable<string | null>;
type Example2 = NonNullable<number | undefined>;

Практический пример: обработка данных с API

type ApiResponse = 
  | { status: "loading" }
  | { status: "success"; data: string[] }
  | { status: "error"; error: string };

function processResponse(response: ApiResponse): void {
  switch (response.status) {
    case "loading":
      console.log("Loading...");
      break;
    case "success":
      console.log("Data:", response.data);
      break;
    case "error":
      console.error("Error:", response.error);
      break;
    default:
      const _exhaustiveCheck: never = response;
      return _exhaustiveCheck;
  }
}

Почему never важен

  1. Безопасность типов — гарантирует, что вы обработали все возможные случаи
  2. Рефакторинг — при добавлении новых типов в union, TypeScript сразу укажет на незаконченный код
  3. Ясность намерений — показывает, что функция никогда не вернёт значение или код является недостижимым
  4. Предотвращение ошибок — помогает выявить баги на этапе разработки, а не в production

never — это мощный инструмент для написания надёжного и type-safe кода на TypeScript.

Для чего используется never в TypeScript? | PrepBro