이안의 평일코딩

[TypeScript] 타입스크립트 기초 (3) - 유니온 타입과 인터섹션 타입 본문

Front-end/TypeScript

[TypeScript] 타입스크립트 기초 (3) - 유니온 타입과 인터섹션 타입

이안92 2021. 1. 20. 12:19
반응형

 

 유니온 타입 ' | '

 

특정 타입을 여러개 쓸 수 있게 해준다.

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

파라미터.을 찍으면 해당하는 타입의 API를 자동완성을 통해 쉽게 이용할 수 있다.

var todo: 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 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 인터섹션 타입

아래의 예시에서 유니온 타입은 Developer 파라미터나 Person 파라미터가 들어가면 되지만,

인터섹션 타입은 Developer, Person 파라미터 속성 모두 합쳐서(name, skill, age) 들어가야 한다.

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

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

// 유니온 타입
function askSomeone(someone: Developer | Person) {
}
askSomeone({ name: '개발자', skill: '타입스크립트'});
askSomeone({ name: '이안', age: 28 });


// 인터섹션 타입
function askSomeone(someone: Developer & Person) {
}
askSomeone({ name: '이안', age: 28, skill: '타입스크립트'}); // 하나라도 누락시 오류
반응형
Comments