やりたいこと
object等の呼び出しで Object[key] のようにするとき、key に動的な変数を入れたい。
上記をより美しく。
問題・エラー
今回の記事では、こちらのコードを修正します。
関数receivedStringValue()は、ランダムでStringの値を返す関数とします。
const object = {
aaa: 'aaa',
bbb: 'bbb',
ccc: 'ccc',
};
// keyには動的に生成された値
const key: string = receivedStringValue();
const value = object[key];
こちらのコードでは、下記のエラーが出ます。
Element implicitly has an 'any' type because expression of type 'string' can't be used to
解決策
object に対して型を定義する
結論
key の型がわかるような object の型を定義する
interface StringKeyObject {
// 今回はstring
[key: string]: any;
}
const object: StringKeyObject = {
aaa: 'aaa',
bbb: 'bbb',
ccc: 'ccc',
};
// keyには動的に生成された値
const key: keyof typeof object = receivedStringValue();
const value = object[key];
keyの型がstringだとあいまいなので、 keyof typeof object でしっかりと制限をかけることがポイントです。
最後まで読んでくださって、ありがとうございます。
参考記事