고급 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,
};

여기서 우리는 선택적 프로퍼티인 hostport를 강제로 필수로 만들어주는 기능을 구현했습니다.

4. 결론

맵드 타입은 TypeScript에서 강력한 도구 중 하나로, 반복적인 작업이나 복잡한 데이터 구조를 간단하게 처리할 수 있도록 돕습니다. 이러한 기능들은 특히 대규모 애플리케이션 개발 시 코드 유지보수를 용이하게 하며, 명확하고 일관된 데이터 구조 설계를 가능하게 합니다.

이를 통해 개발자는 더 나은 품질과 효율성을 갖춘 코드를 작성할 수 있으며, 다양한 상황에 맞춰 유연하게 대응할 수 있는 능력을 가질 것입니다.

Subscribe to shimdh.log

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.
jamie@example.com
Subscribe