// Name: Enums // // Description: Code for managing a more native Enum implementation // // Credit: dphilipson/typescript-string-enums // https://github.com/dphilipson/typescript-string-enums/blob/master/src/index.ts // // Requires: // // ============================================================================ export function Enum(...values: V[]): { [K in V]: K }; export function Enum( definition: T ): T; export function Enum(...values: any[]): object { if (typeof values[0] === 'string') { const result: any = {}; for (const value of values) { result[value] = value; } return result; } else { return values[0]; } } export type Enum = T[keyof T]; export function ofEnumKeys( e: T ): { [K in keyof T]: K } { const result: any = {}; for (const key of Object.keys(e)) { result[key] = key; } return result; } export function enumKeys(e: T): Array { return Object.keys(e) as Array; } export function enumValues( e: T ): Array> { const result: Array> = []; for (const key of Object.keys(e)) { result.push(e[key]); } return result; } export function isEnumType( e: T, value: any ): value is Enum { return enumValues(e).indexOf(value) !== -1; }