#typescript
#typescript
Вопрос:
Как получить свойство, используя индекс ключа объекта в typescript?
Несмотря на ошибку в TypeScript, код работает правильно.
Мой код
const payments = {
KEY1: {prop1: "prop1"},
KEY2: {prop1: "prop1"}
}
Когда я пытаюсь получить доступ по значению ключа, я получаю сообщение об ошибке
const index = 0
const key = Object.keys(payments)[index]
const payment = payments[key] // ERROR HERE
Элемент неявно имеет тип ‘any’, поскольку выражение типа ‘string’ нельзя использовать для индексации типа ‘{}’.
В type ‘{}’.ts(7053) не найдено подписи индекса с параметром типа ‘string’.
payments
имеет тип object
Комментарии:
1. Вы пытались его ввести?
const payments: { [key: string]: {prop1: string} } = {}
Ответ №1:
Добавьте это
const key = Object.keys(payments)[index] as keyof typeof payments;
Когда вы явно не объявляете тип для payments
, typescript выводится как определенные ключи ( KEY1
и KEY2
)
и Object.keys()
возвращает тип в виде строки, что приводит к ошибке.
В строке выше, которую я изменил, будет указано typescript, что key
это будут ключи платежей, а не строка.
Подробнее об этом можно прочитать здесь Создание типов из типов