键入使用泛型的reduce函数(noImplicityAny)

时间:2019-03-12 13:22:15

标签: typescript generics reduce

我有一个函数,该函数接受一个对象并将其键转换为蛇形字符串并返回它。我正在使用reduce来构造新对象,但似乎无法解决此错误:

  

元素隐式地具有“ any”类型,因为类型“ {}”没有索引签名。ts(7017)

哪一行出现在return { ...o, [snakeCase(k)]: evt[k] };上,说明evt[k]具有any类型。我该如何解决?即使它的类型具有索引签名,索引签名也会因为它是一个空对象而被丢弃吗?

interface StringKeyMap<T> {
  readonly [key: string]: T[keyof T];
}

function snakeCaseKeys<T extends object>(evt: T): StringKeyMap<T> {
  const initial: StringKeyMap<T> = {};

  return Object.keys(evt).reduce<StringKeyMap<T>>((o, k) => {
    return { ...o, [snakeCase(k)]: evt[k] };
  }, initial);
}

0 个答案:

没有答案