JavaScript

[Typescript] 타입 가드란? 타입 가드 개념과 쓰는 이유 예시로 파헤치기

Will_ 2024. 10. 6. 21:44
반응형

 

안녕하세요, 윌입니다.

 

오늘은 타입 가드에 대한 설명과 사용 이유에 대해 파헤쳐 보겠습니다.

 

타입 가드에 대해 이해하기 위해선 먼저 Interface, 유니온 타입( | 연산자) 등에 대한 선행 학습이 필요합니다.

 

아래와 같은 2개의 interface가 있습니다. Developer와 Person은 name을 가지지만 각 skill, age를 가진다는 점에서 다릅니다.

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

 

 

tony라는 객체를 만들어보겠습니다. tony는 age, skill을 모두 가지는 객체입니다.

 

그러나 tony.skill 또는 tony.age로 접근 시 타입에러가 발생됩니다. 유니온 타입의 경우 공통된 속성만 접근할 수 있기 때문입니다.

function introduce(): Developer | Person {
  return {
    name: "tony",
    age: 30,
    skill: "js",
  };
}

let tony = introduce();

tony.skill //type error:'Developer | Person' 형식에 'skill' 속성이 없습니다. 
'Person' 형식에 'skill' 속성이 없습니다.ts(2339)

 

 

 

이 때 타입 가드를 사용합니다.

 

아래 예시를 보면 isDeveloper 함수를 선언하고, 해당 함수의 타입을 target is Developer로 선언하였습니다.

 

함수 타입을 Developer로 제한 함으로써 Developer의 속성인 skill에 접근할 수 있으며, 또한 if else를 이용해 Developer가 아닐 경우 Person으로 타입이 좁혀져 age에 접근이 가능합니다.

 

function isDeveloper(target: Developer | Person): target is Developer {
  return (target as Developer).skill !== undefined;
}

if (isDeveloper(tony)) {
  console.log(tony.skill); // type error 없음
} else {
  console.log(tony.age); // Person type으로 인식되어 age 접근이 가능함
}

 

 

이런 식으로 유니온 타입의 경우 타입 가드를 사용하여 타입 에러 없이 객체 속성에 접근할 수 있습니다.

반응형