[Typescript] 대수 타입 - Union, Intersection

Narcoker·2025년 5월 12일

Typescript

목록 보기
8/15

대수 타입

여러 개의 타입을 합성해서 만드는 타입

Union - 합집합

// 합집합 타입 - Union 타입
let a: string | number;

a = 1;
a = "hello";

| 를 이용해서 만들 수 있다.
변수 a 에는 string 타입 또는 number 타입이 할당될 수 있다.

Union 타입으로 배열 타입 정의하기

let arr: (number | string | boolean)[] = [1, "hello", true];

이렇게 사용하면 다양한 타입의 요소를 보관하는 배열 타입을 만들 수 있다.

Union 타입으로 객체 타입 정의하기

// 타입 정의
type Dog = {
  name: string;
  color: string;
};

type Person = {
  name: string;
  language: string;
};

type UnionType = Dog | Person;

// 객체 생성
let union1: UnionType = { // ✅ Dog
  name: "",
  color: "",
};

let union2: UnionType = { // ✅ Person
  name: "",
  language: "",
};

let union3: UnionType = { // ✅ Dog + Person
  name: "",
  color: "",
  language: "",
};

let union4: UnionType = { // ❌
  name: "",
};

Dog 타입 혹은 Person 타입 중 하나와 동일하거나 교집합이어야 한다.

Intersection - 교집합

let variable: number & string; 
// never 타입으로 추론된다

& 를 이용해서 만들 수 있다.
number와 string은 교집합이 없으므로 never 타입(공집합)이 된다.

Intersection 타입으로 객체 타입 정의하기

type Dog = {
  name: string;
  color: string;
};

type Person = {
  name: string;
  language: string;
};

type Intersection = Dog & Person;

let intersection1: Intersection = {
  name: "",
  color: "",
  language: "",
};

두 타입의 프로퍼티를 모두 가지고 있는 타입이 된다.

프로터티명은 같으나 타입이 다르다면 어떻게 될까

type Test1 = {
  name: string;
  age: string; // string 타입
  address: string;
}

type Test2 ={
  name: string;
  age: number; // number 타입
}

// 결과분석
Test1 & Test2 = { // error
  name: string;
  age: never; // string & number → never
  address: string;
}

프로퍼티명이 같은 경우 해당 프로퍼티에도 사용된 & 또는 | 이 연산된다.

출처

인프런 - 한 입 크기로 잘라먹는 타입스크립트

profile
열정, 끈기, 집념의 Frontend Developer

0개의 댓글