ウェブサイト検索

javascript - インターフェースの文字列型のインデックスシグネチャが認識されない(typescript)


私はこのコードを持っています:

const sectionInstance: FieldValues = sectionInstances[i]
for (const field in sectionInstance) {
    console.log(sectionInstance[field])
}

ここでのfieldはもちろん文字列です。FieldValuesの型定義は次の通りです:

export interface FieldValues = {
  [key: string]: FieldValue;
}

それでも私はこのエラーが出ます:

型 'FieldValues' をインデックスするために型 'string' の式を使用できないため、要素は暗黙的に 'any' 型を持ちます。型 'FieldValues' には、型 'string' のパラメータを持つインデックス署名が見つかりませんでした。Vetur(7053)

私は interface FieldValues に型 'string' のインデックス署名を宣言していませんか?なぜこのエラーが出るのですか?

回答 #1

インターフェイス定義から = を取り除くだけです。

遊び場を見てください

interface FieldValues {
  [key: string]: FieldValue;
}
...
const sectionInstance: FieldValues = sectionInstances[i];
for (const field in sectionInstance) {
  console.log(sectionInstance[field]);
}

回答 #2

私の知る限り、TypeScript は [key: string] からキーの型を推論することはできません。これは、いくつかのキー(おそらく他のキーは除く)が文字列型で存在する可能性があることを一般化しようとする場合にのみ有用です。TS は、for でアクセスしているキーが [key: string] で指定した string 型であることを保証できません。明示的に指定する必要があります。