백엔드/Node.js

[TS] 유니온 타입(Union Type)과 인터섹션 타입(Intersection Type)

SparkIT 2025. 4. 9. 20:43

유니온 타입(Union Type)이란?

`|`를 활용해서 타입을 OR로 엮는 타입. OR이기 때문에 유니온 타입으로 나열된 타입들 중 하나만 만족해도 된다.

type Animal = 'dog' | 'cat';

let pet: Animal;
pet = 'dog'; // OK
pet = 'cat'; // OK
pet = 'fish'; // Error!

 

 

인터섹션 타입(Intersection Type)이란?

`&`를 활용해서 타입을 AND로 엮는 타입. AND이기 때문에 인터섹션 타입으로 나열된 타입들 모두 만족해야 한다.

type Name = { name: string };
type Age = { age: number };

type Person = Name & Age;

const p: Person = {
  name: 'Charlie',
  age: 30
}; // OK

const q: Person = {
  name: 'Dave'
}; // Error! age 빠짐

const r: Person = {
  age: 40
}; // Error! name 빠짐

 

 

String & number 가능한가?

인터섹션 타입에서 string 타입과 number 타입을 인터섹션 타입으로 설정할 수 있을까요? 결과는 안됩니다. 하지만 이때 코드 상 에러가 나지는 않습니다. 다만 string과 number를 모두 만족하는 타입은 존재할 수 없으므로 해당 인터섹션 타입은 never 타입이 됩니다.

type Impossible = string & number;

// Impossible은 결국 never 타입
const x: Impossible = 'hello'; // Error
const y: Impossible = 123;     // Error