Я пытался сделать эти две функции, чтобы получить ключи и значения перечислений. Кажется, они работают, и я выяснил большинство набора текста, осталась всего одна ошибка, что я надеялся, что кто-то умнее, чем я в 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]
, которая выдает ошибку этого типа:
Элемент неявно имеет тип 'any', потому что тип '{}' не имеет подписи индекса. 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]);
};