【发布时间】:2019-06-07 07:58:38
【问题描述】:
我尝试使用这两个函数来获取枚举的键和值。他们似乎工作,我已经弄清楚了大部分的打字,只剩下一个错误,我希望在 TypeScript 中比我更聪明的人可以帮助解决......
const isInteger = /^\d+$/;
export const enumKeys = <T>(enumObj: T): string[] => {
return Object.keys(enumObj).filter(k => !isInteger.test(k));
};
export const enumValues = <T>(enumObj: T): T[keyof T][] => {
return enumKeys(enumObj).map(k => enumObj[k]);
};
问题是enumObj[k],它给出了这种类型的错误:
元素隐含地具有“任何”类型,因为类型“{}”没有索引签名。 ts(7017)
我知道我可以忽略警告,但我想学习,但我不明白为什么/这里隐含的 any 是什么,以及如何正确键入它而不是那样。
解决方案,基于接受的答案
const isInteger = /^\d+$/;
export const enumKeys = <T>(enumObj: T): (keyof T)[] => {
return Object.keys(enumObj)
.filter(k => !isInteger.test(k))
.map(k => k as keyof T);
};
export const enumValues = <T>(enumObj: T): T[keyof T][] => {
return enumKeys(enumObj).map(k => enumObj[k]);
};
【问题讨论】:
标签: typescript enums