Part4_Extends,Narrowing
이보경
이야기해보기

타입스크립트에서 집합 개념...?

| 타입스크립트의 타입을 속성의 집합이 아니라, 값의 집합으로 이해해야 한다.

(추가) 교차 타입

  • 공통된 속성은 좁혀지거나 아예 호환되지 않으면 never가 된다.
type IdType = string | number;
type Numeric = number | boolean;
 
type Univeral = IdType & Numeric; // 두 타입을 모두 만족하는 경우인 number가 된다
type BaseCartItem = {
    id: number;
    type: string;
    ...
}
 
type SpecialCartItem = BaseCartItem & {
    type: 'Special'; // 'Special'로 좁혀진다.
}
type DeliveryTip = {
  tip: number;
  };
 
type Filter = DeliveryTip & {
  tip: string; // 에러는 발생하지 않고 Filter의 tip 속성은 never가 된다.
};

exhaustiveCheck

모든 케이스에 대한 타입 분기 처리를 해주지 않았을 때, 컴파일타임 에러가 발생하게 하기

type ProductPrice =10000|20000|5000”;
 
const getProductName = (productPrice: ProductPrice): string => {
  if (productPrice ===10000”) return “배민상품권 1만 원”;
  if (productPrice ===20000”) return “배민상품권 2만 원”;
  // if (productPrice === “5000”) return “배민상품권 5천 원”;
  else {
    exhaustiveCheck(productPrice); // Error: Argument of type ‘string’ is not assignable to parameter of type ‘never’
    return “배민상품권”;
  }
};
 
const exhaustiveCheck = (param: never) => {
  throw new Error(“type error!”);
};