Как правильно добавить индексную подпись к объекту - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть следующие ошибки (решение работает):

Элемент неявно имеет тип 'any', потому что тип '{}' не имеет подписи индекса.[7017]

Код:

const createCollection = (jsonObject: object, namesObject: object): INameHex[] => {
  return Object.keys(jsonObject).map(itemKey => {
    return {
      name: namesObject[itemKey],
      hex: jsonObject[itemKey],
    }
  })
}

Я попытался добавить интерфейс вместо объекта (возможно, неправильно), что-то вроде - jsonObject: IProps.Но это не помогает, поскольку мой объект (аргумент jsonObject) выглядит так:

  success: string
  error: string
  [propName: string]: string 

или

  default: string
  [propName: string]: string

, поэтому структура объекта отличается.Так что я действительно хотел бы знать, как устранить ошибку подписи индекса в этом сценарии?

1 Ответ

0 голосов
/ 08 февраля 2019

Похоже ли это на то, что вы хотите?

interface JSONObj {
    success: string
    error: string
    [propName: string]: string // this is an index signature 
}

interface NamesObj {
    default: string
    [propName: string]: string // this is an index signature
}

const createCollection = (jsonObject: JSONObj | NamesObj, namesObject: NamesObj): INameHex[] => {
    return Object.keys(jsonObject).map(itemKey => {
      return {
        name: namesObject[itemKey],
        hex: jsonObject[itemKey],
      }
    })
  }

Не выдает ошибок и совершенно корректно из типов POV.

...