티스토리 뷰

구조적 타이핑을 보여주는 코드

  • 정의된 코드 타입을 충족한다면 타입스크립트는 동일 타입으로 간주한다.
  • DogInfo와 mallangInfo 타입이 완전 똑같지 않지만 타입스크립트는 정의된 코드를 충족시킨다고 보고 오류 발생시키지 않는다.
interface DogInfo {
  name: string;
  age: number;
}

const mallangInfo = {
  name: "mallang",
  age: 5,
  weight: "3kg",
  likes: ["chicken", "snack"],
};

const getMallangAge = (info: DogInfo) => {
  return info.age;
};

getMallangAge(mallangInfo);

구조적 타이핑으로 인한 구조적 타입과 유니언 타입의 차이

코드 예시

keyof (A&B) = (keyof A) | (keyof B)
keyof (A|B) = (keyof A) & (keyof B)

구조적 타입(인터페이스)의 교집합 Intersection

  • 교집합이 되려면, 타입 관점에서 A에도 속하고 B에도 속해야 한다.

구조적 타입의 유니온 타입일 때의 교집합

  • 어떤 타입이 A에 속하거나 아니면 B에 속해야 한다. A와 B의 공통요소
interface Dog {
  name: string;
}

interface Likes {
  snack: string;
  toy: string;
}

type DogLikes1 = keyof (Dog | Likes); // never

type DogLikes2 = keyof (Dog & Likes); // type DogLikes2 = "name" | keyof Likes

결론

  • 유니언 타입에서의 교집합, 합집합과 구조적 타입(인터페이스)의 교집합 합집합은 다르다.
  • 구조적 타입에서는 정의된 타입이 포함되어야 동일한 타입으로 받아들이기 때문에 구조의 합집합에 해당한다. (&)
  • 구조적 타입의 유니언 타입은 A 타입에 속하거나 B타입에 속하는 공통 요소(교집합)을 의미한다. 따라서 유니언 타입을 집합의 관점이 아니라 개별 원소로만 보아야 한다. extends를 유니언에서 사용할 수 없는 이유.

참고 링크

https://blog.hwahae.co.kr/all/tech/9954

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
글 보관함