Как объединить несколько типов в один интерфейс?

В TypeScript вы можете объединить несколько типов в один интерфейс с помощью оператора | (или «или»). Это называется объединением типов.

Чтобы объединить типы, вы просто указываете их через оператор | в определении интерфейса. Например, предположим, у нас есть два типа: User и Admin, и мы хотим создать интерфейс, который может представлять и того и другого:

interface User {
  name: string;
  age: number;
}

interface Admin {
  name: string;
  role: string;
}

type UserOrAdmin = User | Admin;

В этом примере User и Admin - отдельные интерфейсы с разными свойствами. Мы создаем новый тип UserOrAdmin, который может быть либо User, либо Admin. Теперь у нас есть тип, который может представлять любого пользователя или администратора.

Вы можете использовать UserOrAdmin в качестве типа для переменных или параметров функции:

function getUserInfo(userOrAdmin: UserOrAdmin) {
  console.log(userOrAdmin.name);
  if ('age' in userOrAdmin) {
    console.log(userOrAdmin.age);
  }
  if ('role' in userOrAdmin) {
    console.log(userOrAdmin.role);
  }
}

В этом примере мы определяем функцию getUserInfo, которая принимает параметр userOrAdmin с типом UserOrAdmin. Внутри функции, мы можем использовать свойства name и age если userOrAdmin имеет тип User, и свойства name и role если userOrAdmin имеет тип Admin. Мы можем использовать оператор in для проверки наличия свойства в объекте.

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