TypeScript 매핑 유형 소개
TypeScript의 매핑된 유형은 기존 유형을 변환하여 새로운 유형을 만드는 방법을 제공합니다. 이는 복잡한 유형 작업을 처리하고 TypeScript 애플리케이션에서 유형 안전성을 보장하는 강력한 도구입니다. 이 문서에서는 매핑된 유형을 소개하고 구문을 설명하며 사용을 보여주는 예를 제공합니다.
매핑된 유형이란 무엇입니까?
매핑된 유형은 기존 유형의 각 속성에 변환을 적용하여 새 유형을 만들 수 있도록 합니다. 이는 종종 유연한 방식으로 유형을 수정하거나 확장하는 데 사용됩니다. 매핑된 유형의 기본 구문은 다음과 같습니다.
type MappedType = {
[K in keyof T]: NewType;
};
이 구문에서는:
T
은 원래 유형입니다.K
은T
의 각 키를 나타냅니다.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 애플리케이션에서 유형 정의를 향상하고 사용자 정의하기 위한 강력한 기능을 제공합니다.