[typescript] 타입 별칭과 인터페이스를 사용하여 인덱스 가능 객체 타입 정의하기

TypeScript에서는 타입 시스템을 강력하게 지원하며, 다양한 방법으로 사용자 정의 타입을 정의할 수 있습니다. 이번 포스트에서는 타입 별칭과 인터페이스를 사용하여 인덱싱 가능 객체 타입을 정의하는 방법에 대해 살펴보겠습니다.

1. 타입 별칭(Type Alias)

타입 별칭은 새로운 타입의 이름을 지정할 수 있는 기능입니다. 예를 들어, 다음과 같이 Person 타입 별칭을 정의할 수 있습니다.

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

2. 인터페이스(Interface)

인터페이스는 객체의 구조를 정의하는 목적으로 사용됩니다. 아래의 예시와 같이 IPerson 인터페이스를 정의할 수 있습니다.

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

3. 인덱싱 가능 객체 타입(Indexable Types)

인덱싱 가능 객체 타입은 문자열 또는 숫자로 인덱싱하여 멤버에 접근할 수 있는 객체를 의미합니다. 이를 위해 다음과 같이 인덱스 시그니처(Index Signature)를 사용하여 타입을 정의할 수 있습니다.

3.1 타입 별칭을 사용한 인덱싱 가능 객체 타입

type Dictionary<T> = {
  [key: string]: T;
};

3.2 인터페이스를 사용한 인덱싱 가능 객체 타입

interface IDictionary<T> {
  [key: string]: T;
}

이제, 위에서 정의한 Dictionary 타입 별칭 또는 IDictionary 인터페이스를 사용하여 문자열로 인덱싱 가능한 객체 타입을 만들 수 있습니다.

const myDict: Dictionary<number> = {  
  "one": 1, 
  "two": 2 
};

// 또는

const yourDict: IDictionary<string> = {  
  "apple": "사과", 
  "banana": "바나나" 
};

결론

타입 별칭과 인터페이스를 활용하여 인덱싱 가능 객체 타입을 정의할 수 있습니다. 이를 통해 코드의 가독성과 유지보수성을 향상시킬 수 있으며, 타입 시스템의 장점을 최대한 활용할 수 있습니다.

참고문헌: TypeScript 공식 문서 - 인덱싱 가능 타입(Indexable Types)