유니온과 마찬가지로 타입을 조합하는 방식인 인터섹션에 대해 알아보자.
인터섹션은 쉽게 말하면 AND의 개념이다. 앞에서 배운 유니온은 OR의 개념이었다. 인터섹션의 심볼은 &을 사용한다.
interface Human {
name: string;
age: number;
}
interface Contacts {
phone: number;
address: string;
}
type HumanAndContacts = Human & Contacts;
let humanAndContacts: HumanAndContacts = {
name: '태연',
age: 32,
phone: '01012341234',
address: '대한민국',
}
인터섹션은 조합된 타입들의 프로퍼티가 모두 포함이 된 새로운 타입을 생성한다. 조합된 모든 프로퍼티를 모두 사용해야 한다는 점을 기억하자!
그렇다면 객체가 아닌 다른 타입들을 인터섹션하면 어떻게 될까?
객체가 아닌 primitive 타입들을 인터섹션을 해보자.
type stringAndNumber = string & number;
조금 상식적으로 보면 숫자이면서 문자열인 타입이 있을 수가 없다고 생각이 된다. 그래서 이런 타입은 never 타입으로 추론을 한다.
유니온과 인터섹션을 사용하면 내가 원하지 않는 타입이 입력될 경우를 코드 작성 과정에서 미리 예방할 수 있는 것이 제일 큰 장점인 것 같다.