타입스크립트에서는 타입에 인덱스 시그니처
를 명시하여 유연하게 매핑을 표현할 수 있습니다.
type Rocket = {[property: string]: string};
const rocket: Rocket = {
name: 'Falcon 9',
variant: 'v1.0',
thrust: '4,940 kN',
};
[Property : string] : string
string 타입이 너무 광범위해서 인덱스 시그니처를 사용하는데 문제가 있습니다.
type Vec3D = Record<'x' | 'y' | 'z', number>;
/* Type Vec3D = {
x: number;
y: number;
z: number;
*/
매핑된 타입은 키마다 별도의 타입을 사용하게 해줍니다.
type Vec3D = {[k in 'x' | 'y' | 'z']: number};
type ABC = {[k in 'a' | 'b' | 'c']: k extends 'b' ? string : number};
/* Type ABC = {
a: number;
b: string;
c: number;
*/
}