1. 교차타입 (Intersection)

기존에 존재하는 타입의 모든 멤버 + 새로운 타입

type ProductItem = {
	id: number;
	name: string;
	price: number;
}

type ProductItemDiscount = ProductItem & { discountAmount: number };

2. 유니온 타입 (Union type)

A 또는 B 타입을 만족하는 타입

type CardItem = {
	id: number;
	size: number;
	imageUrl: string;
}

type PromotionItem = ProductItem | CardItem;

3. 인덱스 시그니처 (Index Signatures)

특정 타입의 속성 이름은 알 수 없으나 속성값의 타입을 알 때

interface IndexSignatureExample01 {
	[key: string]: number;  // 모든 키는 문자열이어야 하고, 값은 숫자라는 뜻
}
interface IndexSignatureExample02 {
	[key: string]: number | boolean;
	length: number; // 통과
	name: string; // 에러 발생
								// 인덱스 시그니처가 "key가 문자열인 경우 값은 반드시 숫자 or 불리언" 이라고 명시했기 때문에.
}

4. 인덱스드 엑세스 타입 (Indexed Access Types)