더북(TheBook)

2.10.2 매핑된 객체 타입

이전 절에서 인덱스 시그니처에 대해 배웠습니다. 객체의 속성 값을 전부 특정 타입으로 만들 수 있었는데요. 속성 전부에 타입을 지정하는 대신 일부 속성에만 타입을 부여할 수도 있습니다. 인덱스 시그니처를 사용해서 hellohi라는 속성 이름을 가진 객체를 타이핑해봅시다. 속성 값의 타입은 모두 string입니다. 일단 배운 것을 바탕으로 코드를 작성해보겠습니다.

type HelloAndHi = {
  [key: 'hello' | 'hi']: string; 
};
// An index signature parameter type cannot be a literal type or generic type. Consider using a mapped object type instead.

안타깝게도 에러가 발생합니다. 사실 인덱스 시그니처에서 사용할 수 있는 타입은 string, number, symbol, 템플릿 리터럴 타입과 이들의 유니언뿐입니다.

에러 메시지도 매핑된 객체 타입(Mapped Object Type)을 대신 쓰라고 알려주고 있습니다. 매핑된 객체 타입이란 기존의 다른 타입으로부터 새로운 객체 속성을 만들어내는 타입을 의미합니다. 인터페이스에서는 쓰지 못하고 타입 별칭에서만 사용할 수 있습니다. 다음과 같이 사용합니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.