아래와 같은 객체타입이 있을때, 때로는 key 값만 또는 value 값만 필요할때가 있다. 예를들어 서버에 데이터를 전송할때는 key 값으로 보내고 화면에 그릴때는 value 값이 필요할때 각 타입을 지정해줘야 한다.
타입스크립트에서는 keyof 라는 타입을 제공하고 있기에 keys 값만 가져올 수 있지만, valueof 라는 타입은 제공하지 않고 있다.
그래서 매번 아래와 같이 valueof 타입을 만들어서 사용해야했다.
export const BOOKING_STATUS = {
FREE: "예약가능",
BOOK: "예약",
PENDING: "대기중",
CLOSE: "마감",
} as const;
type BOOKING_STATUS_TYPE = typeof BOOKING_STATUS
type BOOKING_STATUS_KEYS = keyof BOOKING_STATUS_TYPE
/* 이렇게 valueof 타입을 만들어 사용했다 */
type BOOKING_STATUS_VALUES = BOOKING_STATUS_TYPE[BOOKING_STATUS_KEYS]
위와 같이 작성했을때, 코드 양이 많아지고 여러번 작성해야 하는 불편함이 있었다.
그래서 아래와 같이 제네릭을 활용해 valueOf<T>
라는 타입을 만들었다.
export type valueOf = T[keyof T]
사용할때는 아래와 같이 쓰면 된다.
type BOOKING_TIME_TYPE_VALUE = valueOf<BOOKING_STATUS_TYPE>;
BOOKING_STATUS_TYPE 의 value 값만 가져오는 타입이구나 하고 한눈에 알아보기도 쉽다.