【发布时间】:2019-08-02 23:39:23
【问题描述】:
我有一个函数,它接受一个对象并将其键转换为蛇形字符串并返回它。我正在使用reduce 构造新对象,但似乎无法解决此错误:
元素隐式具有“any”类型,因为类型“{}”没有索引 signature.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);
}
【问题讨论】:
-
您使用的是哪个版本的 TS?
-
什么是返回函数
snakeCase
标签: typescript generics reduce