string | number
값은 문자열이거나 숫자다. 사용 전에는 두 타입의 공통 동작만 바로 안전하다.
type UserId = string | number;
|는 가능한 타입 후보를 넓히고, &는 필요한
속성 조건을 합친다. 둘의 차이를 알면 API 응답과 객체 조합 타입을
안전하게 설계할 수 있다.
유니온은 값의 가능한 형태를 나열하고, 인터섹션은 객체가 가져야 할 조건을 합친다.
값은 문자열이거나 숫자다. 사용 전에는 두 타입의 공통 동작만 바로 안전하다.
type UserId = string | number;
값은 직원 정보와 사람 정보를 모두 가져야 한다. 빠진 속성이 있으면 오류다.
type Manager = Employee & Person;
후보가 여러 개일 때는 런타임 검사로 안전한 코드 블록을 만든다.
string | number처럼 원시 타입 후보를 구분할 때 쓴다.
if (typeof id === "string") {
id.toUpperCase();
}
status 같은 공통 리터럴 속성으로 API 응답을 안전하게
나눈다.
if (res.status === "success") {
res.data;
}
객체 후보 중 특정 속성이 있는 타입으로 좁힐 때 사용한다.
if ("message" in res) {
res.message;
}
선택지를 표현할지, 능력을 결합할지 먼저 고르면 기호가 자연스럽게 정해진다.
응답이 여러 형태 중 하나라면 유니온으로 표현하고 식별 필드로 좁힌다.
기본 사용자 속성과 관리자 기능이 모두 필요하면 인터섹션이 맞다.
{a:string} & {a:number}처럼 충돌하면 a는
never가 된다.