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

时间:2019-02-08 08:01:58

标签: javascript typescript ecmascript-6 index-signature

我遇到以下错误(解决方案正在工作):

  

元素隐式具有“ 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 :(得分:1)

看起来像你想要的吗?

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类型完全正确。