TypeScript 매핑 유형 소개

TypeScript의 매핑된 유형은 기존 유형을 변환하여 새로운 유형을 만드는 방법을 제공합니다. 이는 복잡한 유형 작업을 처리하고 TypeScript 애플리케이션에서 유형 안전성을 보장하는 강력한 도구입니다. 이 문서에서는 매핑된 유형을 소개하고 구문을 설명하며 사용을 보여주는 예를 제공합니다.

매핑된 유형이란 무엇입니까?

매핑된 유형은 기존 유형의 각 속성에 변환을 적용하여 새 유형을 만들 수 있도록 합니다. 이는 종종 유연한 방식으로 유형을 수정하거나 확장하는 데 사용됩니다. 매핑된 유형의 기본 구문은 다음과 같습니다.

type MappedType = {
  [K in keyof T]: NewType;
};

이 구문에서는:

  • T은 원래 유형입니다.
  • KT의 각 키를 나타냅니다.
  • NewType은 각 속성에 할당된 새 유형입니다.

매핑된 유형의 기본 예

다음은 주어진 유형의 모든 속성을 읽기 전용으로 변환하는 매핑된 유형의 간단한 예입니다.

type ReadOnly = {
  readonly [K in keyof T]: T[K];
};

type User = {
  name: string;
  age: number;
};

type ReadOnlyUser = ReadOnly;

이 예에서 ReadOnly 매핑된 유형은 User 유형의 모든 속성을 읽기 전용으로 변환하여 모든 속성이 변경 불가능한 새로운 유형 ReadOnlyUser을 생성합니다.

유형 변환을 사용한 매핑된 유형

매핑된 유형은 더 복잡한 방식으로 유형을 변환하는 데에도 사용할 수 있습니다. 예를 들어, 모든 속성을 선택 사항으로 만드는 매핑된 유형:

type Partial = {
  [K in keyof T]?: T[K];
};

type User = {
  name: string;
  age: number;
};

type PartialUser = Partial;

이 예에서 Partial 매핑 유형은 User 유형의 모든 속성을 선택 사항으로 만들고, 각 속성이 선택 사항인 새로운 유형 PartialUser을 생성합니다.

조건 유형과 함께 매핑된 유형 사용

매핑된 유형은 보다 정교한 유형 작업을 위해 조건 유형과 결합될 수 있습니다. 예를 들어, 특정 유형의 속성만 포함하는 유형을 만드는 경우:

type OnlyStrings = {
  [K in keyof T]: T[K] extends string ? T[K] : never;
};

type User = {
  name: string;
  age: number;
  email: string;
};

type StringProperties = OnlyStrings;

이 예에서 OnlyStrings 매핑된 유형은 string 유형이 아닌 속성을 필터링하여 User 유형의 문자열 속성만 포함하는 새로운 유형 StringProperties을 생성합니다.

고급 매핑 유형

매핑된 유형에 대한 고급 사용 사례에는 다양한 조건에 따라 기존 유형을 수정하는 유형을 만드는 것이 포함됩니다. 예를 들어, 각 속성 이름에 접미사를 추가하는 매핑된 유형:

type WithSuffix<T, S extends string> = {
  [K in keyof T as `${string & K}${S}`]: T[K];
};

type User = {
  name: string;
  age: number;
};

type UserWithSuffix = WithSuffix<User, "Prop">;

이 예에서 WithSuffix 매핑된 유형은 User 유형의 각 속성 이름에 접미사를 추가하여 속성 이름에 지정된 접미사가 붙은 새로운 유형 UserWithSuffix을 생성합니다.

결론

TypeScript의 매핑된 유형은 개발자가 기존 유형을 변환하여 새로운 유형을 만들 수 있는 다재다능한 기능입니다. 매핑된 유형을 이해하고 활용함으로써 개발자는 복잡한 유형 변환을 관리하고 TypeScript 코드에서 더 큰 유형 안전성을 보장할 수 있습니다. 매핑된 유형은 TypeScript 애플리케이션에서 유형 정의를 향상하고 사용자 정의하기 위한 강력한 기능을 제공합니다.