고급 TypeScript - 고급 타입: 맵드 타입
고급 타입: 맵드 타입
맵드 타입은 TypeScript에서 매우 유용한 기능으로, 기존의 객체 타입을 기반으로 새로운 타입을 생성할 수 있게 해줍니다. 이를 통해 코드의 재사용성을 높이고, 보다 동적인 방식으로 객체를 정의할 수 있습니다.
1. 맵드 타입의 개념
맵드 타입은 특정 키 집합에 대해 변형된 속성들을 가진 새로운 객체 유형을 생성하는 방법입니다. 이는 주로 keyof
연산자와 함께 사용되며, 모든 속성에 대해 동일한 변환 규칙을 적용하여 새로운 형태의 객체를 만들 수 있습니다.
2. 기본 문법
type OriginalType = {
name: string;
age: number;
};
type MappedType = {
[K in keyof OriginalType]: boolean; // 모든 속성을 boolean으로 변경
};
위 예제에서 OriginalType
은 두 개의 속성(name
, age
)을 가지는 객체입니다. MappedType
은 이 원본 타입의 각 속성을 boolean
형식으로 변환하여 새롭게 정의합니다.
3. 실용적인 예제
예제 1: 상태 관리
상태 관리를 위해 모든 상태 값을 boolean
형식으로 설정하고 싶다고 가정해 보겠습니다.
type UserStatus = {
online: boolean;
offline: boolean;
away: boolean;
};
// 맵드를 사용하여 모든 상태를 true로 초기화하는 경우
type InitialUserStatus<T> = {
[K in keyof T]: true;
};
const initialStatus: InitialUserStatus<UserStatus> = {
online: true,
offline: true,
away: true,
};
이 코드는 사용자 상태를 관리하기 위한 구조체에서 초기값을 쉽게 설정할 수 있도록 합니다.
예제 2: 옵션 설정
어떤 구성 요소가 여러 옵션을 가지고 있고, 그 옵션들이 모두 선택적일 때 사용할 수도 있습니다:
type ConfigOptions = {
host?: string;
port?: number;
};
// 모든 프로퍼티를 필수적으로 만드는 맵드 타임
type RequiredConfig<T> = {
[K in keyof T]-?: T[K]; // -?는 선택적 프로퍼티 제거
};
const config: RequiredConfig<ConfigOptions> = {
host: "localhost",
port: 8080,
};
여기서 우리는 선택적 프로퍼티인 host
와 port
를 강제로 필수로 만들어주는 기능을 구현했습니다.
4. 결론
맵드 타입은 TypeScript에서 강력한 도구 중 하나로, 반복적인 작업이나 복잡한 데이터 구조를 간단하게 처리할 수 있도록 돕습니다. 이러한 기능들은 특히 대규모 애플리케이션 개발 시 코드 유지보수를 용이하게 하며, 명확하고 일관된 데이터 구조 설계를 가능하게 합니다.
이를 통해 개발자는 더 나은 품질과 효율성을 갖춘 코드를 작성할 수 있으며, 다양한 상황에 맞춰 유연하게 대응할 수 있는 능력을 가질 것입니다.