객체 - 객체 인터섹션

Changhan·2025년 1월 27일

Typescript

목록 보기
23/29

앞서 primitive를 intersection하면 동시에 충족하지 못하기 때문에 never 타입이 된다고 했다. 하지만 객체는 동시에 충족시킬 수 있다.

type Person = {
  name: string;
  age: number;
};
type Company = {
  company: string;
  companyRegistrationNumber: number;
};

type PersonAndCompany = Person & Company;

const taeyeon: PersonAndCompany = {
  name: '태연',
  age: 32,
  company: 'SM',
  companyRegistrationNumber: 1,
};

intersection은 Person 타입과 Company 타입을 모두 충족해야 한다. 그래서 extension 한 것과 동일한 결과를 갖는다. 실제로 extension을 할 때도 intersection을 해줬다.

재밌는 건 union과 intersection을 섞을 수 있다는 것이다.

type Pet = {
  petName: string;
  petAge: number;
};
type CompanyOrPet = Person & (Company | Pet);

const companyOrPet: CompanyOrPet = {
  // Person
  name: '태연',
  age: 32,
  // 여기까지는 Person 타입에 해당한다. 꼭 필수 타입이다.

  // Company
  company: 'SM 엔터',
  companyRegistrationNumber: 1123,

  // Pet
  petName: '모서리',
  petAge: 1,
};

CompanyOrPet 타입으로 선언하게 되면 일단 Person 타입은 무조건 충족해야 한다. 그리고 Company를 충족하고, Pet을 아예 안 넣어도 된다. 또한, Pet을 충족하고, Company를 안 넣어도 된다.
그리고 Company를 충족하고, Pet에서 하나의 프로퍼티만 넣어줘도 되고, 반대도 마찬가지다.

0개의 댓글