====Тип пересечения====
Тип пересечения создает новый тип путем объединения нескольких существующих типов. Новый тип имеет все особенности существующих типов.
Чтобы объединить типы, вы используете оператор & следующим образом:
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 Order====
Когда вы пересекаете типы, порядок типов не имеет значения. Например:
type typeAB = typeA & typeB;
type typeBA = typeB & typeA;
В этом примере typeAB и typeBA имеют одинаковые свойства.