如何正确地将索引签名添加到对象

How to properly add index signature to object

我有以下错误(解决方案有效):

Element implicitly has an 'any' type because type '{}' has no index signature. [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

所以对象结构不同。 所以我很想知道在这种情况下如何解决无索引签名错误?

看起来像你想要的吗?

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 来看是完全正确的。