[typescript] 타입 별칭과 인터페이스를 사용하여 mapped 타입 정의하기

TypeScript에서 mapped 타입을 정의하는 것은 유연성과 재사용성을 높이는 중요한 부분입니다. 이번 글에서는 타입 별칭(type alias)과 인터페이스(interface)를 사용하여 mapped 타입을 어떻게 정의하는지 살펴보겠습니다.

타입 별칭(Type Alias)과 Mapped 타입

타입 별칭은 기존 타입에 별칭을 부여하는 방법으로, 복잡한 타입을 간결하게 표현할 수 있습니다. Mapped 타입은 객체의 속성을 탐색하거나 변형하는 데 사용됩니다.

다음은 Person이라는 인터페이스를 정의하고 이를 이용해 MappedType이라는 mapped 타입을 생성하는 예시입니다.

interface Person {
  name: string;
  age: number;
}

type MappedType<T> = {
  [P in keyof T]: T[P] | null;
};

type NullablePerson = MappedType<Person>;
// NullablePerson의 타입은 { name: string | null, age: number | null } 입니다.

위 예시에서 MappedType<T>Person의 속성을 순회하면서 모든 속성의 타입을 T[P] | null로 변경하는 mapped 타입을 정의했습니다.

인터페이스(Interface)와 Mapped 타입

인터페이스 또한 mapped 타입을 정의하는 데 사용될 수 있습니다. 다음은 인터페이스를 사용하여 mapped 타입을 정의하는 예시입니다.

interface Person {
  name: string;
  age: number;
}

interface NullablePerson {
  [P in keyof Person]: Person[P] | null;
}
// 위 코드 블록은 위에서 정의한 MappedType를 인터페이스로 정의한 예시와 동일한 결과를 가집니다.

마치며

타입 별칭과 인터페이스를 사용하여 mapped 타입을 정의하는 방법에 대해 살펴보았습니다. 이러한 기능을 적절히 활용하면 효율적으로 타입을 다룰 수 있으며, 유지보수하기 쉬운 코드를 작성할 수 있습니다.

참고문헌: