経験知ロゴ

TypescriptでObject.keys(data)をループ処理した時、keyの型がstringになったしまうときの対処法

Typescriptロゴ

Typescriptで型付けされたオブジェクトをObject.keys()でmapなどのループ処理をすると、keyの型がオブジェクトのキー名でなく、stringになってしまいます。

type Data = {
  Windows: string;
  Mac: string;
  Linux: string;
}

const data = {
  Windows: "control+l";
  Mac: "command+l";
  Linux: "control+l";
}

const res = Object.keys(data).map((key)=>{
  retun key
})

上記コードだと、resの型はstring[]になってしまいます。

そこで、keyofを使うことで、オブジェクトの型のキーのいずれかをとるUnionTypeにすることで、ループ中のkeyに型付けできます。

それを配列にする。

型定義部分はこんな感じ。

(keyof Data)[]

型アサーションasで上書きし、た全体はこんな感じ。

type Data = {
  Windows: string;
  Mac: string;
  Linux: string;
}

const data = {
  Windows: "control+l";
  Mac: "command+l";
  Linux: "control+l";
}

const res = (Object.keys(data) as (keyof Data)[]).map((key)=>{
  retun key
})

役に立ったらこの記事のシェアをお願いします

ブログのフォロー・RSS購読は下記ボタンから