여러가지 상태를 표현해야 되는 객체 타입을 정의할 때에는 선택적 프로퍼티를 사용하는 것보다는 상태에 따라서 타입들을 잘개 쪼개어 태그같은 프로퍼티를 추가해서 서로소 유니온 타입으로 만들어주는 것이 좋다.
그래야, 스위치 케이스 문을 이용할 때 더 직관적이고 안전하게 타입을 좁힐 수 있기 때문이다.
function login(user: User) {
if (user.tag === "ADMIN") {
console.log(`${user.name}님 현재까지 ${user.kickCount}명 추방했습니다`);
} else if (user.tag === "MEMBER") {
console.log(`${user.name}님 현재까지 ${user.point}모았습니다`);
} else {
console.log(`${user.name}님 현재까지 ${user.visitCount}번 오셨습니다`);
}
}
function login(user: User) {
switch (user.tag) {
case "ADMIN": {
console.log(`${user.name}님 현재까지 ${user.kickCount}명 추방했습니다`);
break;
}
case "MEMBER": {
console.log(`${user.name}님 현재까지 ${user.point}모았습니다`);
break;
}
case "GUEST": {
console.log(`${user.name}님 현재까지 ${user.visitCount}번 오셨습니다`);
break;
}
}
}