강의

멘토링

로드맵

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

이은혜님의 프로필 이미지
이은혜

작성한 질문수

한 입 크기로 잘라먹는 타입스크립트(TypeScript)

타입스크립트 이해하기

대수 타입 - Union과 Intersection 타입 관련

작성

·

624

0

안녕하세요 제가 이해가 조금 안 가서 여쭤봅니다.

합집합(Union 타입)

type Dog = {
  name: string;
  color: string;
};

type Person = {
  name: string;
  language: string;
};

type Union1 = Dog | Person;

let union1: Union1 = { // ✅
  name: "",
  color: "",
};

let union2: Union1 = { // ✅
  name: "",
  language: "",
};

let union3: Union1 = { // ✅
  name: "",
  color: "",
  language: "",
};

합집합이라 union3 경우 이해가 됩니다.

 

그런데, 교집합(Intersection) 타입
이 부분이 이해가 잘 가지 않아서 여쭤봅니다.

type Dog = {
  name: string;
  color: string;
};

type Person = {
  name: string;
  language: string;
};

type Intersection = Dog & Person;

let intersection1: Intersection = {
  name: "",
  color: "",
  language: "",
};

intersection1은 왜 이렇게 되는 걸까요?

교집합이라고 하면Dog와 Person 겹쳐진 name 만 가져와야 하는 게 맞지 않나요?

합집합과 교집합의 의미를 검색해봤는데

합집합 - 집합의 원소를 "모두 포함"하는 집합
교집합 - 두 사건에 "모두 속하는"원소로만 이루어진 집합

자세한 설명 부탁 드립니다

퀴즈

TypeScript에서 문법만 알아서는 부족한 핵심적인 이유는 무엇일까요?

코드 실행 속도가 느려져서

새로운 문제를 만나면 해결하기 어려워서

문법 규칙이 자주 바뀌기 때문에

타입을 전혀 사용할 수 없게 되어서

답변 1

1

이정환 Winterlood님의 프로필 이미지
이정환 Winterlood
지식공유자

안녕하세요 이정환입니다.

타입스크립트에서 객체 타입의 교집합은 '집합'을 기준으로 만들어집니다.

따라서 두개의 객체 타입의 교집합은 두 타입에 모두 속하는 요소들만 포함하는 집합으로 만들어지게 됩니다.

예를 들어 다음과 같은 두개의 타입이 존재할 때

type Dog = {
  name: string;
  color: string;
};

type Person = {
  name: string;
  language: string;
};

Dog 타입과 Person 타입의 교집합 타입은 Dog에도 포함되고 Person에도 포함되는 값들을 포함하는 집합이 되어야 합니다.

그렇기 때문에 교집합은 { name : string } 이 아닌 두 타입의 모든 프로퍼티를 갖는 { name : string, color: string, language: string } 으로 생성됩니다.

{ name : string } 으로 교집합이 생성되면 안되는 이유는 다음과 같습니다.

  • 값 {name : "이정환"}은 이 교집합에는 속하지만 Dog와 Person 타입에 속하지 않습니다(모순)

  • 값 {name: "이정환", color:"갈색"}은 이 교집합과 Dog타입에는 속하지만 Person 타입에는 속하지 않습니다 (모순)

{ name : string, color: string, language: string } 으로 교집합이 생성될 경우도 따져보겠습니다.

  • 값 {name:"이정환", color:"갈색", language:"한국어"}은 Dog타입에도 속하고 Person타입에도 속합니다. 그러므로 교집합입니다.

이은혜님의 프로필 이미지
이은혜
질문자

2개에 모두 속한..! 감사합니다 이해되었습니다 :)

이은혜님의 프로필 이미지
이은혜

작성한 질문수

질문하기