대수 타입
여러개의 타입을 합성해서 새롭게 만들어낸 타입을 말한다.
대수타입에는 합집합 타입과 교집합 타입이 존재한다.
합집합(Union) 타입
아래와 같이 string과 number의 union타입일 경우 두 타입을 모두 넣을 수 있다.
let a : string | number
a = 1
a = "hello"
다음은 객체 타입의 union 타입이다.
위와 마찬가지로 Dog와 Person의 union 타입에는 두 객체를 모두 넣을 수 있다.
또한 두 객체의 property를 모두 합한 타입 또한 가능하다.
// 겍체타입
type Dog = {
name:string,
color: string,
}
type Person = {
name:string,
language: string,
}
type Union1 = Dog | Person;
let union1: Union1 = {
name: "짱구",
color: "black"
}
let union2: Union1 = {
name: "철수",
language: "korean"
}
let union3: Union1 = {
name: "훈이",
color: "white",
language: "korean"
}
하지만 아래와 같이 두 객체가 모두 가지고 있는 property만 있는 객체의 경우 에러가 발생한다.
두 객체의 프로퍼티를 모두 가지는 union3과 같은 경우 Dog타입과 Person타입 모두에 들어갈 수 있지만, 아래와 같은 경우는 두 타입 모두 될 수 없기 때문이다.
교집합(Intersection) 타입
& 연산을 사용해서 아래와 같이 타입들의 교집합을 만들 수 있다.
let variable : number & string;
하지만 교집합을 가지고 있지 않은 형태라면 아래와 같이 공집합을 의미하는 never 타입으로 만들어진다.
이처럼 기본 타입을 가지고 교집합을 만들면 보통 never 타입이 되므로, 주로 객체타입에서 많이 사용된다.
아래는 객체타입의 예시이다. Dog타입이면서 Person타입에 해당되어야 하므로 Dog 타입과 Person 타입의 property를 모두 포함하는 객체만 들어갈 수 있다.
let variable : number & string;
type Dog = {
name:string,
color: string,
}
type Person = {
name:string,
language: string,
}
type Intersection1 = Dog & Person;
let intersection1: Intersection1 = {
name: "짱구",
color: "black",
language: "korean"
출처
한 입 크기로 잘라먹는 타입스크립트 대시보드 - 인프런 | 강의 (inflearn.com)
'typescript' 카테고리의 다른 글
[typescript] 타입 계층과 타입 호환성 (0) | 2023.07.05 |
---|---|
[Typescript] 타입스크립트의 타입 (원시타입, 리터럴타입, 배열, 튜플, 객체, 타입별칭, 인덱스 시그니쳐, 열거형타입, any, unkown, void, never) (0) | 2023.07.02 |
[typescript] 타입스크립트 시작 및 옵션 설정 (0) | 2023.06.19 |