Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 공통컴포넌트
- 제네릭
- 성능최적화
- 커스텀
- click and drag
- 누구나 자료구조와 알고리즘
- 개발콘텐츠
- javascript
- typescript
- react
- returnType
- TSDoc
- NonNullable
- 반복줄이기
- 2022
- 타입스크립트
- vue.js
- JS console
- React.js
- Chart.js
- reactjs
- const 단언문
- CSS
- 폰트적용하기
- 레이아웃쪼개기
- 타입좁히기
- 티스토리꾸미기
- 리액트
- React Native
- utilty type
Archives
- Today
- Total
몽땅뚝딱 개발자
[TypeScript] 유니온 타입 vs 인터섹션 타입 본문
◽ 유니온 타입
여러가지의 타입을 파이브로 연결하여 지정할 수 있다.
// 변수에 사용하기
const user = string | number
// 함수에 사용하기
function logMessage(value: string | number) {
console.log(value);
}
logMessage('hello')
logMessage(10)
📄 예제
// 유니온 타입
function logMessage(value: string | number) {
if(typeof value === 'number') {
value.toLocaleString()
}
if(typeof value === 'string') {
value.toString()
}
throw new TypeError('value must be string or number')
}
◽ 유니온 타입의 특징
두가지의 인터페이스를 사용한다고 선언했더라도 선언된 모든 속성을 사용할 수는 없다.
interface Developer {
name: string;
skill: string;
}
interface Person {
name: string;
age: number;
}
function askSomeone(someone: Developer | Person) {
someone.name // 이 공통된 속성만 접근할 수 있으며
someone.skill // 이 타입은 불가
someone.age // 이 타입은 불가
}
◽ 유니온 타입의 문제점
두가지 타입을 지정하기때문에 타입이 정확하지않아서 아래와 같은 에러가 뜬다.
타입을 받은 상황에서 자동완성은 교집합만 제공한다.
◽ 인터섹션 타입
인터섹션 타입은 여러 타입을 모두 만족하는 하나의 타입이다.
유니온은 '|'(=파이프)로 연결했다면 인터섹션은 '&'로 연결한다.
interface Developer {
name: string;
skill: string;
}
interface Person {
name: string;
age: number;
}
function askSomeone(someone: Developer & Person) {
someone.name
someone.skill
someone.age
}
◽ 유니온 타입 vs 인터섹션 타입
📄 유니온
각 인터페이스의 속성이 개별적으로 필요하다.
function askSomeone(someone: Developer | Person) {
// ...
}
askSomeone({ name: '디벨로퍼', skill: '웹 개발' })
askSomeone({ name: '디벨로퍼', age: 10000 })
📄 인터섹션
각 인터페이스가 가진 모든 속성을 포함해야 한다.
function askSomeone(someone: Developer & Person) {
// ...
}
askSomeone({ name: '디벨로퍼', skill: '웹 개발', age: 10000 })
출처
'Development > Typescript' 카테고리의 다른 글
[TypeScript] 제네릭(Generic) - 다시보기 (0) | 2022.06.06 |
---|---|
[TypeScript] 이넘(Enum) (0) | 2022.06.06 |
[TypeScript] 인터페이스 (0) | 2022.06.06 |
[TypeScript] 변수와 함수의 타입 정의 (0) | 2022.06.06 |
[Typescript] playground (0) | 2022.06.06 |
Comments