Recordとは?
簡単に言うとインデックス型([key: string])やMapと同じくkeyValueオブジェクトの型です。
しかし[key: string]やMapよりも直感的に型付けすることができます。
let a: Record<string, number>;
let b: { [K: string]: number };
let c: Map<string, number>;
具体的な型付け方法
Key側に設定できる型はstring, number, symbolとその3種類のリテラルになります。
またvalue側に設定できる型はなんでもできます。
let a: Record<string, number>; // OK
let b: Record<number, number>; // OK
let c: Record<symbol, number>; // OK;
let d: Record<"あ" | "い" | "う", number>; // OK
type Human = {
name: string;
}
let e: Record<string, Human>; // OK
let e: Record<Human, number>; // NG
インデックス型([key: string])と違い
Keyに対してリテラルを設定できるようになっています。
// OK
let a: Record<"あ" | "い" | "う", number>;
// NG An index signature parameter type cannot be a literal type or generic type. Consider using a mapped object type instead.
let b: { [key: "あ" | "い" | "う"]: number};