• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

안녕하세요 유니온 타입 질문 드립니다.

22.07.27 22:28 작성 조회수 123

1

위 코드를 보면 function 부분에서는 빨간 줄로 오류가 발생합니다. 제가 강의를 보며 이전 강의에서는 유니온 연산일 경우에는 

각 인터페이스의 공통된 값만 사용 할 수 있다고 들었는데요

이제 직접 askSomeone 함수를 이용하여 타입에 맞게 파라미터를 부여할 경우에는 오류가 발생하지 않나요? 

함수를 사용할 때도 원래는 name 만 받아 사용 할 수 있어야 하는 것 아닌가 싶어서 질문드립니다!

 

답변 1

답변을 작성해보세요.

0

안녕하세요 주현님, 본문에 첨부해 주신 이미지에서 에러가 나는 이유는 askSomeone() 함수의 someone 파라미터가 어떤 객체를 받을 지 모르기 때문에 Developer3과 Person3에 공통으로 접근할 수 있는 속성만 안전하게 접근해 주기 때문입니다. 이후에 배우는 타입 가드 개념을 섞어서 특정 라인에서 해당 타입으로 추론하시면 skill이나 age에 접근해도 에러가 안날 거예요.

코드는 아래 코드 참고하세요.

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

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

function isPerson(target: Person | Developer): target is Person {
return (target as Person).age !== undefined;
}

function askSomeone(someone: Person | Developer) {
if (isPerson(someone)) {
someone.age;
}
if (!isPerson(someone)) {
someone.skill;
}
}