타입 호환성과 관련이 있는 것 같으니 전에 작성한 글을 참고하면 좋을 것 같다.
type 물건_집합 = { 이름: string };
type 판매용_집합 = { 금액: number };
&
=== 교집합 ?
type 교집합 = 판매용_집합 & 물건_집합;
// const 물건1: 교집합 = { 이름: '내가 만든 쿠키' } // ERROR!
// const 판매용1: 교집합 = { 금액: 100 } // ERROR!
const 판매용_물건1: 교집합 = { 이름: '내가 만든 쿠키', 금액: 100 }
교집합은 두 집합이 겹치는 일부니까 좁다.
어느 한 집합에만 속하는 원소는 안 되고 두 집합 모두에 속하는 원소만 가능.
|
=== 합집합 ?
type 합집합 = 물건_집합 | 판매용_집합;
const 물건2: 합집합 = { 이름: '내가 만든 쿠키' }
const 판매용2: 합집합 = { 금액: 100 }
const 판매용_물건2: 합집합 = { 이름: '내가 만든 쿠키', 금액: 100 }
합집합은 두 집합을 포함하는 범위니까 넓다.
어느 한 집합에 속하는 원소도, 두 집합 모두에 속하는 원소도 가능.