export function enumValues(enumObj: { [key: string]: T }): IterableIterator; export function enumValues(enumObj: { [key: string]: T; }): IterableIterator>; // TODO: validate export function* enumValues(enumObj: Record): IterableIterator { let isStringEnum = true; for (const property in enumObj) { if (typeof enumObj[property] === 'number') { isStringEnum = false; break; } } for (const property in enumObj) { if (isStringEnum || typeof enumObj[property] === 'number') { yield enumObj[property] as T; } } }