타입은 집합이다.
type A = 'A';
type B = 'B';
type Twelve = 12;
type AB = 'A' | 'B';
type AB12 = 'A' | 'B' | 12;
const a: AB = 'A'; // 가능
const ab: AB = Math.random() < 0.5 ? 'A' : 'B'; // 가능
const ab12: AB12 = ab; // 가능
동등한 상태로 두 개의 타입을 결합
연산자 명칭이 교집합(intersection)인데 왜 합집합처럼 동작하나?
여기서 교집합의 의미는 인터페이스의 각각의 멤버의 교집합이 아니라,
각각의 인터페이스 자체를 모두 포함하는 성격으로서의 교집합이다.
즉, & 로 생성되는 집합은 두 인터페이스 자체가 교집합으로 모두 충족하는, 즉 각각의 멤버가 모두 포함되어야 하는 성격의 집합이다.
상속에 초점, 부-모 관계 형성
interface PersonSpan extends Person {
birth: Date;
death?: Date;
}
아래는 모두 같은 상태이다.
타입을 집합의 관점에서 생각할 때, 각각이 멤버에 집중하지 말고 타입 자체에 집중하기