Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Войти

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

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

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про TypeScript: discriminated, union

Как бы ты описал общий тип для разных вариантов пользователя?

Вопрос проверяет понимание discriminated union и проектирование типовой модели.

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

Общий тип пользователя удобно описывать через discriminated union. Для этого вводится общее поле-дискриминатор. По нему TypeScript понимает, с каким вариантом типа работает код. Такой подход безопасен и хорошо масштабируется. Он часто используется в реальных проектах.

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

Когда у сущности есть несколько чётко определённых вариантов, используется discriminated union.

Определение

Discriminated union — это union-тип, в котором все варианты имеют общее поле с литеральным значением.

Пример описания

interface BaseUser {
  id: number;
  type: "admin" | "user";
}

interface AdminUser extends BaseUser {
  type: "admin";
  permissions: string[];
}

interface RegularUser extends BaseUser {
  type: "user";
  email: string;
}

type User = AdminUser | RegularUser;

Почему это удобно

Такой подход:

  • упрощает сужение типов

  • исключает недопустимые поля

  • улучшает читаемость

  • хорошо масштабируется

Пример использования:

function getUserInfo(user: User) {
  if (user.type === "admin") {
    user.permissions;
  }
}

Почему не optional-поля

Optional-поля:

  • усложняют проверки

  • допускают некорректные состояния

  • делают модель менее строгой

Вывод

Discriminated union — лучший способ описывать общий тип для разных вариантов сущности. Он делает модель данных строгой, читаемой и безопасной.

Уровень

  • Рейтинг:

    5

  • Сложность:

    7

Навыки

  • TypeScript

    TypeScript

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

#discriminated

#union

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