[TypeScript] 서로소 유니온 타입

2025. 2. 24. 17:29·프로그래밍 언어/TypeScript

출처 : 이정환의 한 입 크기로 잘라먹는 타입스크립트

서로소 유니온 타입 ( 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
'프로그래밍 언어/TypeScript' 카테고리의 다른 글
  • [TypeScript] 함수 타입의 호환성
  • [TypeScript] 타입스크립트의 함수 타입, 표현식, 호출 시그니처
  • [TypeScript] 타입 단언, 좁히기
  • [TypeScript] 타입스크립트를 이해한다는 것은 뭘까?
“하루하루가 새로운 인생이다.”
“하루하루가 새로운 인생이다.”
제가 배운 지식을 정리하고 오래 기억하고 싶어서 만든 블로그입니다.
  • “하루하루가 새로운 인생이다.”
    땅콩
    “하루하루가 새로운 인생이다.”
  • 전체
    오늘
    어제
    • 분류 전체보기 (63)
      • 일상 (2)
      • 에러처리 (0)
      • 프로그래밍 언어 (34)
        • TypeScript (21)
        • JavaScript (6)
        • 퍼블리싱 ( HTML, CSS ) (7)
        • 코테 (0)
      • 프레임워크 및 라이브러리 (10)
        • React (10)
        • Next.js (0)
        • Vue.js (0)
        • Spring Boot (0)
      • 데이터베이스 (0)
        • Oracle (0)
      • 디자인 (0)
        • Figma (0)
      • 개발 도구 (5)
        • Git (4)
        • Docker (0)
        • IDE (1)
      • 프로젝트 (0)
        • 개인 프로젝트 (0)
        • 팀 프로젝트 (0)
        • 프로젝트 회고 (0)
      • 정보처리기사 (12)
        • 1과목 (4)
        • 2과목 (2)
        • 3과목 (2)
        • 4과목 (2)
        • 5과목 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    TypeScript
    정보처리기사
    React
    GIT
    javascript
    자바스크립트
    한 입 크기로 잘라먹는 타입스크립트
    웹
    리액트
    css
    정처기
    벼락치기
    Hook
    타입 별칭
    HTML
    인터페이스
    js
    타입 스크립트
    이정환
    타입스크립트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
“하루하루가 새로운 인생이다.”
[TypeScript] 서로소 유니온 타입
상단으로

티스토리툴바