Typescript получает значение объекта из ключа

#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 это будут ключи платежей, а не строка.

Подробнее об этом можно прочитать здесь Создание типов из типов