宮水の日記

宮水の日記

主に書評や資格取得について記事を書いています。

Element implicitly has an 'any' type because expression of type '"test1"' can't be used to index type '{}'. Property 'test1' does not exist on type '{}'.ts(7053)

こんな感じのテストを書こうとしていました。

//     { test1: 'test1', 'test2.title': 'test2' } みたいなデータが返ってくる関数をimport
import messages from 'translations/messages';

describe('messeages', () => {
  it('return flattened ja.json data', () => {
    expect(messages['test1']).toEqual('test1');
    expect(messages['test2.title']).toEqual('test2');
  });
});

するとこんなエラーが出ました。
お前がimportしたオブジェクトの中身がなんなのかよくわからんぞ的なことが書いてあるんだと思います。

Element implicitly has an 'any' type because expression of type '"test1"' can't be used to index type '{}'. Property 'test1' does not exist on type '{}'.ts(7053)


こうしたら解決しました。
オブジェクトが持っているkeyの型を定義してあげる必要がありました。

import messages from 'translations/messages';

const test_messages: { [key: string]: any } = messages; // ここをプラス

describe('messeages', () => {
  it('return flattened ja.json data', () => {
    expect(test_messages['test1']).toEqual('test1');
    expect(test_messages['test2']).toEqual('test2');
  });
});
<||