@ivan0512

Какая логика работы intersection и union типов?

Как я понял, после чтения про данные типы к ним нужно относиться как будто это множества. То есть | может объединять два множества, а & находит их пересечение. Данный пример подтверждает данную логику. При помощи перечисления тип string отбрасывается
type A = number | string;
type B = A & number; // number


Однако у меня возникает вопрос при рассмотрении второго случая. Если вместо примитивных типов взять объекты. Здесь & уже находит не пересечение ({ a: number }), а объединяет два объекта . Что кажется для меня ошибкой. Понимаю, что где-то глупо ошибаюсь, но не могу понять где
type C = { a: number } | { b: number };
type D = C & { a: number };

const test2: D = {
  a: 1,
  b: 2
}
  • Вопрос задан
  • 28 просмотров
Решения вопроса 1
Вы неправильно поняли. Просто читайте | как "или", а & - как "и".

number | string значит, что переменная содержит либо число, либо строку.

number &string значит, что переменая будет и числом и строкой одновременно. И не важно, как это реализовано, и реализуемо ли в принципе (нет).
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы