[Typescript 10] type guard

타입가드

타입 가드는 스코프 안에서의 타입을 보장하는 런타임 검사를 수행한다는 표현식(공식문서 설명),
내가 이해하기론 타입 안에 있는 속성의 유무를 확인하고 이용하기 위한(..) 것이다.

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); // 유니언타입은 공통 속성만 가능하므로 name만 가능하다(함수에서 skill을 반환함에도 불구하고)


// 그래서 아래 코드처럼 if문으로 확실하게 명시해준 뒤에 skill이나 age가 가능한데 복잡복잡해서 아래처럼 타입가드가 나온거
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);
}


// type guard 정의
// developer인지 확인하는 함수 
function isDeveloper(target: Developer | Person): target is Developer { // target is Developer => 반환값이 Developer면
    return (target as Developer).skill !== undefined; // Developer인지 확인하는 코드
}

if(isDeveloper(tony)) {
    console.log(tony.skill);
}else {
    console.log(tony.age);
}

@Sarah
개인적인 공부를 위해 만든 블로그입니다. 혹시 틀린 점이 있다면 메일로 남겨주시면 감사하겠습니다!

GitHubGmail