【TypeScript】Object.keys() に keyof typeof で型をつける
(TypeScript のバージョンは 3.7 である)
Object.keys()
は文字列の配列型を返す。
const SomeObject = { FOO: 'foo', BAR: 'bar', BAZ: 'baz', } // string[] 型 const keys = Object.keys(SomeObject) for (const key of keys) { // key は string 型なのでこれは型エラーになる const value = SomeObject[key] }
オブジェクトのキーが既知である場合、keyof typeof
を使うと次のようにして Object.keys()
を「オブジェクトのキーの配列型」に型変換できる。
const SomeObject = { FOO: 'foo', BAR: 'bar', BAZ: 'baz', } const keys = Object.keys(SomeObject) as (keyof typeof SomeObject)[] for (const key of keys) { // 型チェックが通る const value = SomeObject[key] }
だけど、これは JavaScript の発想で、TypeScript の郷に入るとまた違った流儀がある。個人的には Object.keys()
をできるだけ使わないほうが TypeScript らしいコードになると思う。