[typescript] 유니온 타입과 인터섹션 타입의 차이점은 무엇인가요?

유니온 타입

유니온 타입은 여러 타입 중 하나일 수 있는 값을 정의할 때 사용됩니다. 예를 들어, string | number는 문자열이나 숫자 값 중 하나일 수 있는 타입을 정의합니다.

다음은 유니온 타입의 예시입니다.

type MyType = string | number;

let myVariable: MyType;
myVariable = "Hello"; // 유효
myVariable = 123; // 유효
myVariable = true; // 오류: 'boolean' 타입은 'string | number' 타입과 일치하지 않습니다.

인터섹션 타입

인터섹션 타입은 여러 타입을 하나로 결합할 때 사용됩니다. 예를 들어, Employee & Serializable & Loggable은 모든 세 타입의 속성을 가지는 새로운 타입을 정의합니다.

다음은 인터섹션 타입의 예시입니다.

interface Employee {
  empId: number;
  empName: string;
}

interface Serializable {
  serialize: () => string;
}

interface Loggable {
  log: () => void;
}

type MyType = Employee & Serializable & Loggable;

let myVariable: MyType;
// myVariable은 Employee, Serializable, Loggable의 모든 속성과 메서드를 가져야 합니다.

결론

유니온 타입은 주어진 값이 여러 타입 중 하나일 수 있는 경우 사용되고, 인터섹션 타입은 주어진 값이 여러 타입을 동시에 만족해야 하는 경우 사용됩니다.