minstudio

맵드 타입 (Mapped Types)

기존 타입의 속성들을 순회(map)하여 새로운 타입을 찍어내는 맵드 타입(Mapped Types)입니다.

🏭 타입 공장 (Mapped Types) 기존 인터페이스 (T) id: number name: string email: string 순회 (for...in) [P in keyof T] 모든 키를 가져와 가공 새로운 형태의 타입 id?: number name?: string email?: string 기존 속성들을 기반으로 동적으로 새로운 타입 구조를 찍어내는 템플릿 엔진

🏭 타입 공장 (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; // ❌ 읽기 전용 속성이므로 할당할 수 없습니다.
맵드 타입 (Mapped Types) | Minstudio