参考: https://typescriptbook.jp/reference/values-types-variables/object/index-signature
- TypeScript で、オブジェクトのフィールド名をあえて指定せず、プロパティのみを指定したい場合がある
- そのときに使えるのが
インデックス型(index signature) - たとえば、プロパティがすべて number 型であるオブジェクトは次のように型注釈する
- インデックス型のフィールド名の型は string、number、symbol のみが指定できる
type Obj = {
[K: string]: number;
};
- インデックス型のオブジェクトであれば、フィールド名が定義されていないプロパティも代入できる
- たとえば、インデックス型
{ [K: string]: number }には、値が number 型であれば、a や b など定義されていないフィールドにも代入できる
type Obj = {
[K: string]: number;
};
const obj: Obj = { a: 1, b: 2 }; // OK
obj.c = 3; // OK
- インデックス型は
Record<K, T>ユーティリティ型を用いても表現できる - 次の 2 つの型注釈は同じ意味になる
type Obj = {
[K: string]: number;
};
type Obj = Record<string, number>;