다음과 같은 타입이 있습니다.
type T = {
id: string;
postId: string;
}
위의 타입을 구성하는 키들은 "id" | "postId"인데, 이 키들로 구성된 타입은 다음 코드로 얻을 수 있습니다.
type KEYS = keyof T;
다음의 코드를 통해 T 타입을 구성하는 키들의 타입을 number로 변경할 수 있습니다.
type X = { [K in KEYS]: number };
// type X = { [K in "postId" | "useId"]: number };
즉, 위의 타입 결과는 다음과 같습니다.
type X = {
id: number;
postId: number;
}
Mapped Types를 이용해 각 키와 값에 대한 readonly 또는 optional로 변경할 수 있습니다.
type readonly_X = { +readonly [K in KEYS]: number };
type optional_X = { [K in KEYS]+?: number };
readonly와 ? 앞에 + 또는 -를 지정함으로써 readonly와 optioanl을 지정할지(+) 제거할지(-)를 결정할 수 있습니다. 이 +-를 지정하지 않으면 +가 지정된 것으로 판단합니다.
