export function enumValues(enumObj: { [key: string]: T }): IterableIterator export function enumValues(enumObj: { [key: string]: T }): IterableIterator> export function* enumValues(enumObj: { [key: string]: T }): 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] } } }