Инструменты пользователя

Инструменты сайта


typescript:types:intersection

Тип пересечения

Тип пересечения создает новый тип путем объединения нескольких существующих типов. Новый тип имеет все особенности существующих типов.

Чтобы объединить типы, вы используете оператор & следующим образом:

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 имеют одинаковые свойства.

typescript/types/intersection.txt · Последние изменения: 2023/01/29 20:23 — werwolf