출처 : 이정환의 한 입 크기로 잘라먹는 타입스크립트
서로소 유니온 타입 ( Disjointed Union Type )
태그드 유니온(Tagged Union Type)라고 불린다: 교집합이 없는 완전히 다른 타입들을 하나의 유니온 타입으로 묶은 것.
서로소 유니온 타입의 특징
1. 각 타입을 구별할 수있는 "태그" 필드 (`tag` 또는 `state` 등) 가 존재
2. switch-case 문 또는 if-else 문으로 특정 타입을 쉽게 판별 가능.
예제 1. 사용자(user) 타입
type Admin = {
tag: "ADMIN";
name: string;
kickCount: number;
};
type Member = {
tag: "MEMBER";
name: string;
point: number;
};
type Guest = {
tag: "GUEST";
name: string;
visitCount: number;
};
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;
}
예제 2: 비동기 작업 ( Async Task )
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;
}
}
'프로그래밍 언어 > TypeScript' 카테고리의 다른 글
[TypeScript] 함수 타입의 호환성 (0) | 2025.02.25 |
---|---|
[TypeScript] 타입스크립트의 함수 타입, 표현식, 호출 시그니처 (0) | 2025.02.25 |
[TypeScript] 타입 단언, 좁히기 (0) | 2025.02.24 |
[TypeScript] 타입스크립트를 이해한다는 것은 뭘까? (0) | 2025.02.20 |
[TypeScript] 타입스크립트에만 있는 특별한 타입. (0) | 2025.02.20 |