상수가 아닌 리터럴 변수에 다른 타입의 변수를 저장하고 싶다면
미리 유니언 타입으로 타입을 지정해줘야 함
// Literal Types
const userName1 = "Bob";
let userName2: string | number = "Alice";
// 다른 타입의 값을 저장하고 싶다면
// 위처럼 미리 유니언 타입으로
userName2 = 3;
role과 같은 변수일 경우
유니언 타입을 통해 마치 enum과 같이 제한할 수 있음
/ -------------------------------------
// union type
type Job = "police" | "developer" | "teacher";
interface User {
name: string;
job: Job;
}
const user: User = {
name: "Jack",
job: "police",
};
interface HighSchoolStudent {
name: string;
grade: 1 | 2 | 3;
}
유니언타입에 쓰이는 타입에 서로다른 prop가 있을 경우
if문이나 switch문 등을 통해
타입에 따른 분기가 필요
interface Car {
name: "car";
color: string;
start(): void;
}
interface Mobile {
name: "mobile";
color: string;
call(): void;
}
function getGift(gift: Car | Mobile) {
console.log(gift.color);
if (gift.name === "car") {
gift.start();
} else {
gift.call();
}
// -----------------------
// Intersection Types
interface Bus {
name: string;
start(): void;
}
interface Toy {
name: string;
color: string;
price: number;
}
const toyBus: Toy & Bus = {
name: "장난감",
start() {},
color: "black",
price: 12000,
};
인터섹션 타입에 쓰이는 타입의 모든 필드를 채워줘야 함.