마지막으로 모든 속성의 타입이 동일한 객체의 타입인 Record를 타이핑해보겠습니다.
type MyRecord<K extends keyof any, T> = {
[P in K]: T;
};
type Result = MyRecord<'a' | 'b', string>;
/*
type Result = {
a: string;
b: string;
}
*/
K extends keyof any를 통해 K에 string | number | symbol로 제약을 걸었습니다. 제약은 가능하면 엄격하게 거는 것이 좋습니다. 속성 이름으로 사용할 수 없는 값을 K로 제공하는 실수를 막을 수 있기 때문입니다.
다음 절에서는 컨디셔널 타입을 활용하는 Utility Types를 살펴보겠습니다.