👩‍💻 Обьединение и пересечение типов в Typescript

TypeScript предлагает мощные инструменты для работы с типами данных, такие как пересечения (&) и объединения (|). Эти операторы позволяют комбинировать типы, чтобы создавать новые типы с определенными свойствами. Давайте рассмотрим каждый из них подробнее.

Пересечение типов &

Пересечение типов объединяет два типа таким образом, что новый тип будет содержать свойства обоих исходных типов. Это полезно, когда нужно создать тип, который наследует свойства нескольких объектов.

Пример: `interface Person { name: string; }

interface Employee { id: number; }

type PersonEmployee = Person & Employee;

const personEmployee: PersonEmployee = { name: 'Иван Иванов', id: 12345, };

Здесь PersonEmployee — это тип, который содержит оба свойства: name от интерфейса Person и id от интерфейса Employee.

Объединение типов |

Объединение типов создает новый тип, который может принимать значения любого из указанных типов. Это полезно, когда переменная может иметь несколько возможных типов.

Пример: `type StringOrNumber = string | number;

let value: StringOrNumber; value = 'Привет'; // OK value = 42; // OK value = true; // Ошибка! Тип boolean не входит в StringOrNumber

Здесь StringOrNumber — это тип, который может быть либо строкой, либо числом.

Использование в практике

Эти операции часто применяются для улучшения безопасности типов и удобства разработки. Например, если у вас есть функция, принимающая параметры разных типов, вы можете использовать объединение:

function printValue(value: string | number) { console.log(Значение: ${value}`); }

printValue('Строка'); // Выводит: Значение: Строка printValue(100); // Выводит: Значение: 100

Или если вам нужно объединить данные двух сущностей в одну, удобно использовать пересечение:

`interface UserData { username: string; email: string; }

interface AdditionalInfo { age: number; city: string; }

type FullUserProfile = UserData & AdditionalInfo;

const user: FullUserProfile = { username: 'alice', email: 'alice@example.com', age: 30, city: 'Москва' };````