인프런 커뮤니티 질문&답변

융융님의 프로필 이미지
융융

작성한 질문수

타입스크립트 입문 - 기초부터 실전까지

타입 가드를 위한 예제 소개

union 타입 반환에 대해서 질문합니다

작성

·

243

1

타입 가드 쪽 강의를 살펴보다 질문이 생겼습니다.

interface Developer {
    name: string;
    skill: string;
}

interface Person_ {
    name: string;
    age: number;
}

function introduce(): Developer | Person_ {
    return {name: "tony",age: 33, skill: "ts"}; //
}

유니온 타입을 사용하면 Developer와 Person_의 공통 속성인 name에만 접근할 수 있는 걸로 알고 있었는데, 반환값을 코드와 같이 작성하면 세 속성 전부를 반환할 수 있는 이유가 무엇인지 궁금합니다.

답변 1

2

안녕하세요 융융님, 제가 답변이 늦어져서 죄송합니다 :) 좋은 질문 주셨네요. 위에 작성해 주신 코드 기준으로 introduce 함수가 만약 아래와 같다면

function introduce(someone: Developer | Person_):  {

  someone.name; // 별도의 타입가드를 제공하지 않는 경우 name 속성만 접근가능

}

함수의 인자로 받은 타입이 Developer나 Person_ 모두 취급할 수 있기 때문에 어느 타입이 들어올지 몰라 안전한 `name` 값만 접근할 수 있다고 보면 되구요.

반대로 아래와 같은 경우라면

function introduce(): Developer | Person_ {

    return {name: "tony",age: 33, skill: "ts"}; //

}

const someone = introduce();

someone의 타입이 Developer | Person_이기 때문에 두 타입에서 제공하는 속성은 모두 할당할 수 있지만 실제로 someone 변수를 쓸 때 다시 위에 안내드린 상황으로 돌아갑니다.

결국엔 특정 시점에 어떤 타입으로 간주되어야 안전한지라는 관점에서 보시면 처음엔 조금은 헷갈리시더라도 금방 익숙해지실 거예요 :)

융융님의 프로필 이미지
융융
질문자

답변 감사합니다 !!!

융융님의 프로필 이미지
융융

작성한 질문수

질문하기