맵드 타입 (Mapped Types)
기존 타입의 속성들을 순회(map)하여 새로운 타입을 찍어내는 맵드 타입(Mapped Types)입니다.
🏭 타입 공장 (Mapped Types)
[P in keyof T] 구문을 사용하면 반복문(`for...in`)을 돌듯이
기존 인터페이스의 모든 키를 가져와 동적으로 새로운 형태를 만들어냅니다.
interface UserProfile {
name: string;
age: number;
email: string;
}
// 1. Mapped Type을 사용하여 모든 속성을 선택적(Optional)으로 변경 (Partial의 원리)
type MyPartial<T> = {
[P in keyof T]?: T[P];
};
const updateProfile: MyPartial<UserProfile> = {
age: 30 // name, email이 없어도 에러가 나지 않습니다.
};
// 2. 모든 속성을 읽기 전용(Readonly)으로 변경
type MyReadonly<T> = {
readonly [P in keyof T]: T[P];
};
const user: MyReadonly<UserProfile> = { name: "Alice", age: 25, email: "a@b.com" };
// user.age = 26; // ❌ 읽기 전용 속성이므로 할당할 수 없습니다.