> Что такое объединение и пересечение типов в TypeScript (TypeScript)

Уровень: junior · Роль: frontend · Категория: Технические вопросы

Компании: Инрэко, ООО Премиум ИТ Солюшен, SmartWay

Стек: TypeScript

> Пример ответа

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

Объединение типов (union types) в TypeScript - это тип, который может быть одним из нескольких указанных типов, записывается через |. Пересечение типов (intersection types) - это тип, который включает все свойства из всех указанных типов, записывается через &. Union позволяет выбрать один вариант, intersection объединяет несколько типов в один.

Подробное объяснение

Union types (|) позволяют переменной принимать значения разных типов. Например, string | number означает, что значение может быть строкой или числом. TypeScript сужает union до конкретного типа через type guards, чтобы обеспечить безопасный доступ к свойствам.

Intersection types (&) объединяют несколько типов в один, требуя наличия всех свойств из каждого типа. Например, A & B означает, что объект должен иметь все свойства из A и все из B. Это полезно для комбинирования интерфейсов или типов.

Ключевое различие: union - "или", intersection - "и". Union расширяет возможные значения, intersection сужает их, добавляя требования.

На практике

Union types часто используются для параметров функций, которые могут принимать разные форматы данных, или для обработки состояний (например, loading | success | error). Intersection types применяются при миксинах, комбинировании конфигураций или расширении существующих типов без наследования.

Важно помнить, что intersection с примитивами (например, string & number) даёт never, так как значение не может быть одновременно строкой и числом.

Пример кода

TYPESCRIPT
// Union type
type Status = 'loading' | 'success' | 'error';
function handleStatus(status: Status) {
if (status === 'loading') {
console.log('Загрузка...');
}
}
// Intersection type
interface HasName {
name: string;
}
interface HasAge {
age: number;
}
type Person = HasName & HasAge;
const person: Person = { name: 'Анна', age: 25 }; // обязательно оба поля

Как отвечать на собеседовании

Начни с краткого определения union и intersection, затем приведи простой пример. Подчеркни разницу: union - выбор одного из вариантов, intersection - объединение требований. Упомяни практическое применение: union для состояний и опциональных типов, intersection для комбинирования интерфейсов. Если спросят про сложные случаи, скажи, что intersection с примитивами даёт never.

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

Интервьюер оценивает понимание базовых концепций системы типов TypeScript: как работают union и intersection, их синтаксис и различия. Важно показать, что ты понимаешь, когда какой тип использовать, и как TypeScript обрабатывает сужение типов для union.

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

  • Путать union и intersection: думать, что | объединяет свойства, а & выбирает одно из значений.
  • Использовать intersection для примитивов (string & number), не понимая, что это never.
  • Забывать про type guards для union types, что приводит к ошибкам доступа к несуществующим свойствам.
  • Считать, что intersection создаёт новый тип с уникальными свойствами, а не требует все из исходных типов.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью