union 타입 반환에 대해서 질문합니다
278
작성한 질문수 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 변수를 쓸 때 다시 위에 안내드린 상황으로 돌아갑니다.
결국엔 특정 시점에 어떤 타입으로 간주되어야 안전한지라는 관점에서 보시면 처음엔 조금은 헷갈리시더라도 금방 익숙해지실 거예요 :)
TSLint
0
67
1
vscode eslint server 오류
0
82
1
안녕하세요. 기본타입- 튜플, 객체, 진위값 부분의 영상의 화면이 나오질 않습니다.
0
77
1
live server 설치 오류
1
372
2
강의 교안 pdf 는 따로 제공하지않나요?
0
287
2
npm i 설치 이유 문의
1
407
3
index.ts Delete `␍`eslintprettier/prettier 오류(빨간줄) 해결
2
289
3
vue 에서 jquery 사용 문제
1
696
2
TSLint 확장 프로그램은 현재 지원하지 않는다고 합니다.
1
501
2
강의 내용처럼 노란 밑줄이 작동하지 않아서 유사 질문들을 실행해보았는데요
1
544
1
section 3-1 JSdoc 타입이 추론되지 않아서 다음과 같이 수정했는데 이거 맞나요?
1
453
2
함수에 리턴 안됐다고 노란밑줄이 쳐져야하는데 없습니다
2
457
1
파일이 다른데 식별자가 중복되었다고 뜹니다.
1
445
2
빨간줄 에러 질문드립니다
1
489
2
마우스 갖다대면 리턴값 설명 나오는 거 질문드려요
1
358
2
js에서 @ts-check 적어도 체크하지 못하는 문제입니다
2
395
2
index.html에서 타입스크립트 콘솔 찍는 법 질문드립니다
1
567
2
섹션 1-3 추론 질문드립니다
1
355
2
왜 api쪽에는 왜 에러가 안나는지 궁금합니다.
1
325
2
const item1을 선언했을 때 타입을 선언해줘도 괜찮을까요?
1
391
1
전화번호부 타입선언
1
267
2
타입을 전역으로 분리
1
593
2
객체 선언 시 구분자는 쉼표, 세미콜론 모두 사용가능한건가요?
1
460
1
Git 관련 질문이 있습니다
1
672
2





