1. extends와 교차타입의 비슷한 점
•
extends와 교차타입 모두 타입을 확장하는데에 사용 됨
interface BaseMenuItem {
itemName: string | null;
itemImageUrl: string | null;
itemDiscountAmount: number;
stock: number | null;
}
interface BaseCartItem extends BaseMenuItem {
quantity: number;
}
TypeScript
복사
type BaseMenuItem = {
itemName: string | null;
itemImageUrl: string | null;
itemDiscountAmount: number;
stock: number | null;
};
// 유니온 타입과 교차타입을 사용한 새로운 타입은 type 키워드로만 선언 가능
type BaseCartItem = {
quantity: number;
} & BaseMenuItem;
TypeScript
복사
2. extends와 교차타입의 차이점
•
그러나 일부 케이스에서 동작의 차이가 있음
interface DeliveryTip {
tip: number
}
interface Filter extends DeliveryTip {
tip: string
// Interface 'Filter' incorrectly extends interface 'DeliveryTip'.
// Types of property 'tip' are incompatible.
// Type 'string' is not assignable to type 'number'.(2430)
} // 오류 발생
TypeScript
복사
type DeliveryTip = {
tip: number
}
type Filter = DeliveryTip & {
// 새롭게 추가되는 속성에 대해 미리 알 수 없기 때문에 선언 시 에러가 발생하지 않는다
tip: string
} // tip은 never 타입이 됨
TypeScript
복사