대수타입

여러개의 타입을 합성해서 새롭게 만들어낸 타입

합집합 타입, 교집합 타입이 존재한다.

Union타입 (합집합)

string와 number의 합집합 타입(string number 유니온타입이라 한다.

 let a: string | number;
 a = 1;
 a = 'hi';

배열의 타입에도 지정가능

let arr: (number | string)[] = [1,'hi']

Union타입은 or 연산 처럼 작동하는 타입이다.

function func(value: number | string ) {
	value; // value: number|string;
	
  value.toFixed() // 에러발생 string타입에는 사용할 수 없음
	value.toUpperCase() // 에러발생 number 타입에는 사용할 수 없음
}

타입 좁히기

객체 유니온타입

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

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

type Union1 = Dog | Person

Dog type의 프로퍼티를 갖는 객체

let union2 : Union1 = {
    name: '',
    language: '',
}

Person type의 프로퍼티를 갖는 객체

let union2 : Union1 = {
    name: '',
    language: '',
}

Dog, Person type의 프로퍼티를 모두 갖는 객체 (교집합에 있는 객체이다)

let union3: Union1 = {
    name: '',
    color: '',
    language: '',
}

하지만 Dog, Person 타입에 모두 있는 name 프로퍼티만을 지정했을때는 에러가 난다. union4는 Dog타입에도 속하지 않고 (color가 없음) , Person 타입에도 속하지 않는다 (language가 없음)