@ivan0512

Почему нет ошибки при использовании intersection типа?

Возник такой вопрос, при использовании union типа присваиваемый объект должен быть либо type1, либо type2. Данный объект очевидно не может быть присвоен type1, так как не хватает свойтва b, однако, если предположить, что он type2, то тут также есть лишнее свойство, то есть также должна быть ошибка при присвоении объектного литерала. Однако тс не считает это ошибкой. Почему так?
type type1 = {
  a: number;
  b: number;
};

type type2 = {
  c: number;
};

type type3 = type1 | type2;

const test1: type3 = { // Тут должна быть ошибка
  a: 111,
  c: 222,
};

test1.a // При этом работает все корректно. Обратиться к переменным в таком случае нельзя


Это баг ts или я что-то не понимаю?
  • Вопрос задан
  • 29 просмотров
Пригласить эксперта
Ответы на вопрос 1
А это и не ошибка вовсе. В переменную типа type1 | type2 можно назначить значение типа type1 или типа type2. Ваше значение вполне соответствует типу type2, так что всё в порядке. Что до "лишнего" свойства "a", то его наличие, строго формально, - не ошибка. Теоретически там может быть любое дополнительное поле. Но TypeScript не допускает такого, для предотвращения _человеческих_ ошибок. Это что-то типа linting, Хотя строго формально, как я уже сказал, - это не ошибка.
Вот соответствующий комментарий.
Ответ написан
Ваш ответ на вопрос

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

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