728x90
서로소 유니온 타입
/**
* 1. 서로소 유니온 타입
* : 교집합이 없는 타입으로만 만든 유니온 타입
*/
type Admin = {
tag : "ADMIN"
name : string;
kickCount : number;
};
type Member = {
tag : "MEMBER"
name : string;
point : number;
};
type Guest = {
tag : "GUEST"
name : string;
visitCount : number;
};
/**
* tag property를 추가해주면서 서로 교집합이 사라짐.
* tag가 ADMIN이면서 MEMBER이면서 GEUST일 수 없기 때문
*/
type User = Admin | Member | Guest;
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;
}
}
// if(user.tag === "ADMIN") {
// console.log(`${user.name}님 현재까지 ${user.kickCount}명 강퇴했습니다.`)
// } else if (user.tag === "MEMBER") {
// console.log(`${user.name}님 현재까지 ${user.point}모았습니다.`)
// } else if (user.tag === "GUEST") {
// console.log(`${user.name}님 현재까지 ${user.visitCount}번 오셨습니다.`)
// }
};
/**
* 복습을 위한 추가 사례
* : 비동기 작업의 결과를 처리하는 객체
*/
type LoadingTask = {
state : "LOADING";
};
type FailedTask = {
state : "FAILED",
error : {
message : string;
};
};
type SuccessTask = {
state : "SUCCESS",
response : {
data : string;
};
};
type AsyncTask = LoadingTask | FailedTask | SuccessTask;
function processResult(task : AsyncTask) {
switch(task.state) {
case "LOADING": {
console.log("로딩 중...");
break;
}
case "FAILED": {
console.log(`에러 발생 : ${task.error.message}`);
break;
}
case "SUCCESS": {
console.log(`성공 : ${task.response.data}`);
break;
}
}
}
const loading : AsyncTask = {
state : "LOADING"
};
const failed : AsyncTask = {
state : "FAILED",
error : {
message : "오류 발생 원인 : ",
},
};
const success : AsyncTask = {
state : "SUCCESS",
response : {
data : "반환 데이터 : ",
},
};
※ 해당 글은 인프런 - 한 입 크기로 잘라먹는 타입스크립트(TypeScipt)를 참고하였습니다.
728x90
반응형
'Language > TypeScript' 카테고리의 다른 글
| [TypeScript] 타입스크립트 이해(4) - 타입단언/타입좁히기 (0) | 2025.06.15 |
|---|---|
| [TypeScript] 타입스크립트 이해(3) - 타입추론 (0) | 2025.06.15 |
| [TypeScript] 타입스크립트 이해(2) - 대수타입 (0) | 2025.06.15 |
| [TypeScript] 타입스크립트 이해(1) - 집합/타입계층도/타입호환성 (0) | 2025.06.15 |
| [TypeScript] 타입스크립트 기본(4) - Void, Never (0) | 2025.06.08 |