언어/TypeScript

타입 가드

calendar2 2024. 8. 25. 18:36

두 가지 이상의 타입을 결합한 상태에서 조건분기를 할 때 일반적으로 서로소 유니온 타입을 사용한다. 하지만 서로소 유니온 타입을 사용할 수 없는 환경도 존재하는데 이럴 때 타입 가드를 사용한다.

아래 두 개의 타입을 보자.

타입 가드 1

 

강아지 타입과 고양이 타입을 선언해주었다. 이렇게 우리가 타입을 정의하는 경우에는 서로소 유니온 타입으로 타입 좁히기를 진행했다.

하지만, 내장되어 있는 클래스라던가 인터페이스라면 우리가 직접 커스텀을 할 수 없기에 서로소 유니온 타입으로 설정하는 것이 불가능하다.

서로소 유니온 타입 정의가 안된다면 조건 분기가 다음과 같이 이뤄져야 한다.

타입 좁히기

 

보시다시피 직관성이 사라졌다. 이런 코드에 경우에 각 조건분기에서 어떤 타입인지 주석을 달아 표기해줘야 한다.

또한, 만약 Dog 타입의 isBark가 이름이 변경될 경우 아래 조건분기도 변경해야 하는 불편함이 있다.

이를 방지하기 위해 타입 가드를 만들어 방지할 수 있다.

타입 가드 2

 

새로 만든 isDog(), isCat() 함수로 animal을 각각 Dog과 Cat 타입으로 단언하여 각 프로퍼티가 있는지 확인해서 타입 좁히기를 진행했다. 그러나 타입이 제대로 좁혀지지 않았다. 바로 반환 타입이 설정되지 않았기 때문이다.

따라서, 다음과 같이 코드를 작성해줘야 타입 가드 역할이 제대로 동작한다.

타입 가드 3

참고자료

한 입 크기로 잘라먹는 타입스크립트(TypeScript)

 

한 입 크기로 잘라먹는 타입스크립트(TypeScript) 강의 | 이정환 Winterlood - 인프런

이정환 Winterlood | 문법을 넘어 동작 원리와 개념 이해까지 배워도 배워도 헷갈리는 타입스크립트 이제 제대로 배워보세요! 여러분을 타입스크립트 마법사🧙🏻‍♀️로 만들어드립니다., 프론

www.inflearn.com

 

'언어 > TypeScript' 카테고리의 다른 글

클래스  (0) 2024.08.29
인터페이스  (0) 2024.08.25
함수 타입의 호환성과 오버로드  (0) 2024.08.23
TypeScript 환경 설정  (2) 2024.08.22
함수 타입  (0) 2024.08.22