Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+1 512новых вакансий за сутки·54 396вакансий открыто сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании5 565
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 395 кандидатов открыты к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python8 752
  • Облачные технологии6 631
  • QA вакансии2 183
  • Android1 322
  • Инженер данных860
  • Продакт-менеджер316

Разработка

  • iOS1 238
  • Backend вакансии1 196
  • AI вакансии549
  • Fullstack вакансии500
  • Frontend вакансии426
  • Mobile вакансии28

По стеку

  • Go5 209
  • Java3 131
  • Kotlin1 113
  • Node.js1 008
  • Rust833
  • .NET656
  • PHP322
  • C++270
  • C#207

DevOps и инфраструктура

  • Kubernetes3 882
  • Linux-инфраструктура2 817
  • DevOps вакансии2 655
  • Terraform / IaC2 191
  • Мониторинг и Observability1 071
  • CI/CD919
  • SRE308
  • Кибербезопасность38

Аналитика и данные

  • Аналитик данных522
  • Data Scientist435
  • Бизнес-аналитик397
  • Системный аналитик67

Другие направления

  • Проджект-менеджер109
  • UI/UX дизайн67
  • Ручное тестирование14

По регионам

  • Вакансии в США25 642
  • Вакансии в Европе10 259
  • Работа в России3 639
  • Вакансии в Канаде2 255

По формату

  • Удалённые вакансии42 339
  • Релокация в США25 642
  • Гибридная работа5 706
  • Офисная работа2 761

По уровню

  • Senior вакансии19 599
  • Middle вакансии11 130
  • Junior вакансии3 562

Сейчас нанимают

Все компании
  • Wise192 вакансии
  • Rakuten189 вакансий
  • ASML163 вакансии
  • Grab134 вакансии
  • Celonis42 вакансии
  • Spotify37 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace17 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К подготовке по вакансии←К теме TypeScriptВсе вопросы
TypeScriptJuniorТеория

Объясните union-типы и intersection-типы. Когда использовать каждый?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

Union (A | B) — значение одного из типов, используется для опциональных значений и состояний. Intersection (A & B) — значение всех типов сразу, используется для слияния объектных типов и миксинов.

Union-типы (|)

Значение может быть одним из перечисленных типов:

type StringOrNumber = string | number;

function printId(id: string | number) {
  // TypeScript требует narrowing перед использованием специфических методов
  if (typeof id === 'string') {
    console.log(id.toUpperCase()); // ok: string
  } else {
    console.log(id.toFixed(2));    // ok: number
  }
}

// Дискриминированный union (discriminated union)
type Shape =
  | { kind: 'circle'; radius: number }
  | { kind: 'rect'; width: number; height: number };

function area(shape: Shape): number {
  switch (shape.kind) {
    case 'circle': return Math.PI * shape.radius ** 2;
    case 'rect':   return shape.width * shape.height;
  }
}

Union-типы и Intersection-типы в TypeScript

Union (A | B) означает «одно из», Intersection (A & B) означает «всё сразу». Это фундаментальные инструменты для моделирования данных в TypeScript.

Intersection-типы (&)

Значение должно удовлетворять всем типам одновременно:

type Timestamped = { createdAt: Date; updatedAt: Date };
type WithId = { id: string };

type Entity = WithId & Timestamped;
// Entity = { id: string; createdAt: Date; updatedAt: Date }

// Практичный пример: миксины
type AdminUser = User & AdminPermissions;
type ReadonlyRecord<T> = Readonly<T> & { readonly _brand: 'ReadonlyRecord' };

Когда использовать Union

  • Значение может быть разных типов: string | null, number | undefined.
  • Моделирование состояний: Loading | Success | Error.
  • API-ответы с разными формами в зависимости от status.
  • Параметры функций, принимающих несколько типов.

Когда использовать Intersection

  • Объединение нескольких интерфейсов в один тип.
  • Миксины и trait-like паттерны.
  • Добавление дополнительных полей к существующему типу без наследования.

Тонкости: примитивы в Intersection

type Strange = string & number; // never — невозможное значение
type Branded = string & { _brand: 'UserId' }; // branded types — полезный паттерн

type UserId = string & { readonly _brand: unique symbol };
function createUserId(raw: string): UserId {
  return raw as UserId;
}

Подводные камни

  • При intersection объектов с одинаковыми полями разных типов получается never: { a: string } & { a: number } → { a: never }.
  • Union требует exhaustive check в switch — без default: assertNever(x) новые кейсы будут молча игнорироваться.
  • Широкий union string | number | boolean | object делает код непрактичным — сужайте через discriminant поля.
  • Intersection с any даёт any, union с any тоже даёт any — это инфекционный тип.
  • Intersection интерфейсов vs extends: interface A extends B, C предпочтительнее для наследования — даёт лучшие сообщения об ошибках.
  • Дискриминированный union не работает, если discriminant не является литеральным типом — type: string не сужает, нужно type: 'circle' | 'rect'.

Типичные ошибки

  • Смешивать «union-типы и intersection-типы» с похожим механизмом без критерия выбора.
  • Игнорировать риск: неверно оценить границы применения темы «union-типы и intersection-типы» и получить хрупкое решение.
  • Показывать только синтаксис и не объяснять поведение в runtime или сборке.

Что проверяет интервьюер

  • Объясняет выбор между альтернативой значений и объединением требований.
  • Показывает на примере, как работает: union означает A или B и требует narrowing, а intersection означает значение, которое удовлетворяет сразу нескольким типам; путаница ломает модели API.
  • Называет production-нюанс и граничный случай для темы «union-типы и intersection-типы».

Как вы знаете этот вопрос?

Проверить себя по теме TypeScript →

Источники

  • https://www.typescriptlang.org/docs/handbook/2/everyday-types.html
  • https://www.typescriptlang.org/docs/handbook/2/objects.html
←Предыдущий вопросЧто такое утилитные типы `Partial<T>`, `Required<T>`, `Readonly<T>` и `Pick<T, K>`?Следующий вопрос→Какие production-риски чаще всего возникают в проектах на TypeScript: производительность, зависимости, конкурентность, деплой или observability?

Связанные темы

TypeScriptapi-designtype-modeling

Частые вопросы на собеседовании

  • Что такое TypeScript и какие основные преимущества он даёт по сравнению с обычным JavaScript?
  • В чём разница между interface и псевдонимом типа (type) в TypeScript?
  • Что такое generics в TypeScript и зачем они нужны? Приведите пример.
  • Для каких задач TypeScript является сильным выбором, а где лучше честно выбрать другой язык?