🌟

TypeScript | Object.keys() から生成される配列の要素に対する型推論を string[] ではない型推論にしたい

2023/01/21に公開

やりたいこと

型推論結果 を string[] から ('name' | 'age')[] にしたい

つまりどういうことかというと・・・

const object = { name: '名前', age: 50 };
const resultArray = Object.keys(object);
// 型推論結果 : string[]

const object = { name: '名前', age: 50 };
const resultArray = Object.keys(object);
// 型推論結果 : ('name' | 'age')[]

の型推論結果になるようにしたい

実現方法

Object.keys()に対して型アサーションで適切な型を指定すれば実現可能です。

const object = { name: '名前', age: 50 };
const resultArray = Object.keys(object) as Array<keyof typeof object>;
// 型推論結果 : ('name' | 'age')[]
TypeScript Playground で試した結果
TypeScript Playground で試した結果

keyof typeof object で「objectのプロパティ名の共用体型(union type)」を表現する型を取得することができます。この場合は “name” | “age” です。なので Array<keyof typeof object>(“name” | “age”)[] を表します。Object.keys を呼び出した結果は配列を返すため、これによって型は("name" | "age")[]となり、TypeScriptに正しく型推論させることができます。

Discussion