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