interface Developer {
name: string;
skill: string;
}
interface Person {
name: string;
age: number;
}
function introduce(): Developer | Person {
return { name: 'Tony', age: 30, skill: 'Iron Making' }
}
var tony = introduce();
console.log(tony.skill); // tony.skill에 접근할 수 없다.
if ((tony as Developer).skill) {
var skill = (tony as Developer).skill;
console.log(skill);
} else if ((tony as Person).age) {
var age = (tony as Person).age;
console.log(age);
}
타입가드를 정의함으로써 true, false를 통해 해당 타입인지 아닌지 구분한 다음 해당 타입의 속성에 접근이 가능해진다.
타입 가드
//function is해당타입 인자 is 해당타입
// 타입 가드 정의
function isDeveloper(target: Developer | Person): target is Developer {
return (target as Developer).skill !== undefined;
}
if (isDeveloper(tony)) {
// Developer타입일 경우
console.log(tony.skill);
} else {
// Person 타입일 경우
console.log(tony.age);
}