Индексная подпись типа 'строка' на интерфейсе не распознается (машинописный текст) - PullRequest
2 голосов
/ 02 августа 2020

У меня есть этот код:

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

field вот, конечно, строка. Вот определение типа для FieldValues:

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

Тем не менее, я получаю эту ошибку:

Элемент неявно имеет тип «любой», поскольку выражение типа «строка» может не может использоваться для индексации типа «FieldValues». Индексная подпись с параметром типа «строка» не была найдена для типа «FieldValues». Ветур (7053)

Разве я не объявил индексную сигнатуру типа «строка» для interface FieldValues? Почему я получаю эту ошибку?

Ответы [ 2 ]

2 голосов
/ 02 августа 2020

Просто удалите = из определения интерфейса.

Обратите внимание на игровую площадку

interface FieldValues {
  [key: string]: FieldValue;
}
...
const sectionInstance: FieldValues = sectionInstances[i];
for (const field in sectionInstance) {
  console.log(sectionInstance[field]);
}
0 голосов
/ 02 августа 2020

Насколько я знаю, Typescript не может определить тип ключа из [key: string]. это полезно только тогда, когда вы пытаетесь обобщить, что некоторые ключи (возможно, кроме других) могут быть там строкового типа. TS не может гарантировать, что ключ, к которому вы обращаетесь в for, имеет тип string, который вы использовали в [key: string]. вы должны сказать это прямо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...