Тип пересечения создает новый тип путем объединения нескольких существующих типов. Новый тип имеет все особенности существующих типов.
Чтобы объединить типы, вы используете оператор & следующим образом:
type typeAB = typeA & typeB;
Тип AB будет иметь все свойства как из типа A, так и из типа B.
Обратите внимание, что тип объединения использует | оператор, определяющий переменную, которая может содержать значение типа A или типа B
let varName = typeA | typeB; // union type
Предположим, у вас есть три интерфейса: BusinessPartner, Identity и Contact.
interface BusinessPartner { name: string; credit: number; } interface Identity { id: number; name: string; } interface Contact { email: string; phone: string; }
Ниже определяются два типа пересечения:
type Employee = Identity & Contact; type Customer = BusinessPartner & Contact;
Тип Employee содержит все свойства типа Identity и Contact:
type Employee = Identity & Contact; let e: Employee = { id: 100, name: 'John Doe', email: 'john.doe@example.com', phone: '(408)-897-5684' };
А тип Customer содержит все свойства типа BusinessPartner и Contact:
type Customer = BusinessPartner & Contact; let c: Customer = { name: 'ABC Inc.', credit: 1000000, email: 'sales@abcinc.com', phone: '(408)-897-5735' };
Позже, если вы захотите реализовать продажи сотрудникам, вы можете создать новый тип пересечения, который будет содержать все свойства типов Identity, Contact и BusinessPartner:
type Employee = Identity & BusinessPartner & Contact; let e: Employee = { id: 100, name: 'John Doe', email: 'john.doe@example.com', phone: '(408)-897-5684', credit: 1000 };
Обратите внимание, что и BusinessPartner, и Identity имеют имя свойства одного типа. Если их нет, то у вас будет ошибка.
Когда вы пересекаете типы, порядок типов не имеет значения. Например:
type typeAB = typeA & typeB; type typeBA = typeB & typeA;
В этом примере typeAB и typeBA имеют одинаковые свойства.