작성
·
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 변수를 쓸 때 다시 위에 안내드린 상황으로 돌아갑니다.
결국엔 특정 시점에 어떤 타입으로 간주되어야 안전한지라는 관점에서 보시면 처음엔 조금은 헷갈리시더라도 금방 익숙해지실 거예요 :)
답변 감사합니다 !!!