반응형
타입 단언만을 사용했을때 생기는 문제
interface Developer{
name : string;
skill : string;
}
interface Person {
name: string;
age: number;
}
// 타입들의 공통 된 속성만 접근할수 있는게 유니온 타입
function introduce() : Developer | Person {
return { name : 'Tony', age : 33 , skill : 'Iron Making'}
}
var tony = introduce();
console.log(tony.skill); // 에러
// 타입 단언
if ((tony as Developer).skill) {
var skill = (tony as Developer).skill;
console.log((tony as Developer).skill);
} else if ((tony as Person).age){
var age = (tony as Person).age;
console.log(age);
}
- 타입들의 공통 된 속성만 접근할수 있는게 유니온 타입이라 skill은 없는게 된다.
- 근데 리턴값에 분명 skill을 넘겨줬음에도 불구하고 에러가 나서 아쉽다.
- 위의 코드처럼 타입 단언을 이용해서 해결할수 있지만 코드가 길어지고 가독성이 나빠진다.
- 이럴때 타입 가드를 사용해보자
타입 가드 사용예시
var tony = introduce();
// 타입 가드 정의
function isDeveloper(target : Developer | Person) : target is Developer{
// skill이 있으면 Developer 타입이다라고 넘겨준다.
return (target as Developer).skill !== undefined;
}
if (isDeveloper(tony)) {
tony.skill;
} else{
tony.age
}
- 타입가드 함수를 쓸때 is라는 패턴으로 주로 함수명을 짓는다.
- 함수 리턴타입에 사용한 is 키워드는 넘겨받은 파라미터가 실제로 해당 타입인지 구분하는 키워드다.
- target is Developer로 넘겨받은 파라미터가 Developer 타입인지 true, false로 응답해주기 때문에 타입 가드라 부른다.
- 타입 가드를 사용해서 Developer 일때의 tony 의 data, Person 일때의 tony의 데이터 모두 사용 가능하게 되었다.
- 실제 많이 사용되는 패턴이다.
반응형
'TypeScript > TypeScript - 기초부터 실전까지' 카테고리의 다른 글
26. 타입스크립트의 모듈 시스템 | Import & Export (0) | 2023.10.15 |
---|---|
24. 타입 단언 소개 | 타입 단언 예제 (0) | 2023.10.14 |
23. Best Common Type 추론 방식 (0) | 2023.10.14 |
22. 인터페이스와 제네릭을 이용한 타입 추론 방식 (0) | 2023.10.14 |
21. 타입 추론 (Type Inference) (0) | 2023.10.14 |