
여러 개의 타입을 합성해서 만드는 타입
// 합집합 타입 - Union 타입
let a: string | number;
a = 1;
a = "hello";
|를 이용해서 만들 수 있다.
변수 a 에는 string 타입 또는 number 타입이 할당될 수 있다.
let arr: (number | string | boolean)[] = [1, "hello", true];
이렇게 사용하면 다양한 타입의 요소를 보관하는 배열 타입을 만들 수 있다.

// 타입 정의
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 타입 중 하나와 동일하거나 교집합이어야 한다.
let variable: number & string;
// never 타입으로 추론된다
&를 이용해서 만들 수 있다.
number와 string은 교집합이 없으므로 never 타입(공집합)이 된다.

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;
}
프로퍼티명이 같은 경우 해당 프로퍼티에도 사용된
&또는|이 연산된다.