Object呼び出しでkeyに動的な変数を使用する

const object = {
    name: 'Your name',
    age: 'Your age',
};
// keyには動的に生成された値だとする
const key: string = keyValue;
const value = object[key];

以下のようにエラーが発生する

Element implicitly has an 'any' type because expression of type 'string' can't be used to index type '{ name: string; age: string; }'.

動的に生成された動的な変数の値がObjectのキーに合わなくてオブジェクトを参照できないケースがある
その場合object に対して型を定義したり、keyofを使用することでエラーを回避することができる

Objectに対して型の定義をするとき

interface IObject {
    [key: string]: any;
}
const object: IObject = {
    name: 'Your name',
    age: 'Your age',
};
// 動的に生成されたキー
const key: string = keyValue as string;
const value = object[key];

オブジェクトに型を明記することで動的な参照のエラーを回避する方法
更にこれよりもベターなのがkeyofを使用する方法
typeofで対象のオブジェクトの型を読み取り、更にkeyofでそのオブジェクトのkeyの方を参照する
キーに対してアサーションで付与してやればよい、もしくは受け取り先の変数に型を定義してやればよい

const object = {
    name: 'Your name',
    age: 'Your age',
};
const key = keyValue as keyof typeof object;
const value = object[key];

実装例

const object = {
    name: 'Your name',
    age: 'Your age',
};
for (const v in object) {
    const key = v as keyof typeof object
    console.log(object[key]);
}

関連記事