맵드 타입(mapped type)은 기존 객체 타입을 기반으로 새로운 객체 타입을 유연하게 생성할 수 있는 타입스크립트의 기능임. keyof, 인덱스드 엑세스 타입 등과 결합해 중복 없이 코드를 간결하게 유지할 수 있음.
interface User {
id: number;
name: string;
age: number;
}
// 수정 가능한 필드를 선택적으로 만들고 싶을 때
type PartialUser = {
[key in "id" | "name" | "age"]?: User[key];
};
이 맵드 타입은 다음과 같은 결과 타입이 됨:
{
id?: number;
name?: string;
age?: number;
}
type PartialUser = {
[key in keyof User]?: User[key];
};
keyof User는 "id" | "name" | "age"와 같기 때문에 위와 동일한 결과 타입이 생성됨.
type ReadonlyUser = {
readonly [key in keyof User]: User[key];
};
→ 모든 프로퍼티를 readonly로 변환한 새 타입이 생성됨.
기존 타입을 기반으로:
이러한 방식으로 유지보수와 확장성이 매우 뛰어난 타입 정의가 가능해짐.
keyof, 인덱스드 엑세스 타입 등과 함께 사용하면 강력한 타입 변환기가 됨Partial, Readonly, Pick, Record 등이 전부 맵드 타입으로 구현되어 있음)