728x90
인터섹션 타입에 앞서 유니온 타입은 여러개의 타입이 올수 있을때 | 를 이용하여 타입을 지정해주는 것이었는데요.
interface Developer {
name: string;
skill: string;
}
interface Person {
name: string;
age: number;
}
function askSomeone(someone: Developer | Person){
someone.name;
}
유니온 타입의 경우 or 연산자처럼 | 연산자를 이용하기 때문에 위의 코드는 someone에 name속성이나 age, skill등을 모두 사용할수 있을것같지만 실제로 name밖에 출력할수 없게 됩니다.
Developer인터페이스와 Person인터페이스의 공통속성인 name만 제공하고 있는 모습입니다.
그 이유는 Developer도 되어야하고 Person도 되어야 하기 때문인데요
Developer의 skill이나 Person의 age를 타입 검증도 없이 사용하게 되면
에러를 발생하게 됩니다.
그렇다면 and 연산자인 &를 사용하면 어떨까요??
interface Developer {
name: string;
skill: string;
}
interface Person {
name: string;
age: number;
}
function askSomeone(someone: Developer & Person){
someone.name;
someone.skill;
someone.age;
}
&연산자 즉 인터섹션타입을 이용하면 에러가 발생하지 않습니다.
const example: string & number & boolean;
이런 경우를 보면
example이라는 변수는 string타입임과 동시에 number 타입임과 동시에 boolean타입인데요.
이런경우는 불가능 하기때문에 결국엥 example은 never타입을 가지게 됩니다.
즉, 인터섹션 타입이란 위에서 처럼 string도 만족하고 number도 만족하고 boolean도 만족하는 하나의 타입을 의미하는건데요.
그 위의 Developer와 Person을 보시면 두 인터페이스의 합집합이라고 볼 수 있습니다.
반면 유니온 타입의 경우에는 타입가드 처리가 되어있지 않았을 경우 두 타입의 교집합이라고 볼수 있습니다.
728x90
'TS 관련 > TypeScript' 카테고리의 다른 글
[TypeScript] Abstract Class(추상 클래스) (0) | 2022.07.23 |
---|---|
[TypeScript] 제네릭(Generics) (0) | 2022.07.22 |
[TypeScript] 접근 제한자(Access Modifiers), Getter와 Setter (0) | 2022.07.20 |
[TypeScript] 생성자(Constructor) (0) | 2022.07.19 |
[TypeScript] Class와 객체(OOP 프로그래밍) (0) | 2022.07.18 |