typescriptのObjectのKeyを繰り返したくない。

起こったこと

以下のDataMapのようなオブジェクトを作るとして、Keyがkey1,key2,key3と繰り返し記載しているのがよろしくない。(①のパターン)

keyをstringとする場合、key1,key2,key3以外のプロパティ名を持つことが出来てしまい、よろしくない(②のパターン)

interface Data {
  // 省略
}

interface DataMap { // ①
  key1: Data,
  key2: Data,
  key3: Data // 繰り返していてプログラミングっぽくない
}

interface DataMap { // ②
  [key: string]: Data, // key4も宣言できちゃう
}

typeとinを使う

interface Data {
  // 省略
}

type DataKey = "key1" | "key2" | "key3"; // keyの入る文字列を制限

interface DataMap {
  [key in DataKey] : Data; // inを使ってあげる
}