개발공부/개념정리 | TypeScript

Union type | intersection type

개발집사 2022. 12. 23. 15:43

Union type

function logMessage(value: string | number) {
  console.log(value);
}

logMessage('hello');
logMessage(100);

타입가드

조건문에서 객체의 타입을 좁혀나갈 수 있다.

참고링크

var jong: string | number | boolean;
function logMessage(value: string | number) {
  if(typeof value === 'number') {
    value.toLocaleString();
  }
  if(typeof value === 'string'){
    value.toString();
  }
  throw new TypeError('value must be string of nubmer')
}
interface 두개를 입력했을때
interface Developer {
  name: string;
  skill: string;
}

interface Person {
  name: string;
  age: number;
}

function askSomone(someone: Developer | Person) {
  someone.name
  someone.age //오류
  someone.skill //오류
}

//오류가 발생하지 않음.
askSomeone({ name: 'develop', skill: 'web' })
askSomeone({ name: 'dev', age: 100 })

❗️위와 같이 입력하고 싶을때, age 와 skill은 아래와 같이 오류가 난다.

=> name 이라는 속성만 공통되어있기에 나머지는 오류가 날 수 있다고 판단하기 때문.

만약 age와 skill도 사용하고 싶다면 위에서 정의한 것처럼 타입가드를 사용해야한다.

 

Intersection

& 연산자를 이용한다.

interface Developer {
  name: string;
  skill: string;
}

interface Person {
  name: string;
  age: number;
}

function askSomeone2(someone: Developer & Person) {
  someone.name;
  someone.skill;
  someone.age;
}

askSomeone({ name: 'develop', skill: 'web' }) //age가 없다고 오류남

 

'개발공부 > 개념정리 | TypeScript' 카테고리의 다른 글

제네릭  (0) 2022.12.26
이넘(Enums)  (0) 2022.12.23
인터페이스 / 타입 별칭  (0) 2022.12.22
기본 타입 && 함수타입  (0) 2022.12.21
기초설정  (0) 2022.12.21