diff --git a/src/enum.ts b/src/enum.ts index 450f4e4..a8c80b8 100644 --- a/src/enum.ts +++ b/src/enum.ts @@ -1,15 +1,6 @@ /** A symbol indicating that an object is an enumeration. */ const isEnum: symbol = Symbol('Enum'); -/** - * An object that looks like an enumerated type. - * @typeparam T The type of the object properties. - */ -export type EnumLike = Record; - -/** A value of an enumerated type. */ -export type EnumValue = boolean|number|string; - /** Provides helper methods for enumerations. */ export abstract class Enum { @@ -44,7 +35,7 @@ export abstract class Enum { * @return The newly created enumeration. * @typeparam T The type of the enumerated values. */ - static create(typeDef: EnumLike): Readonly & EnumMethods> { + static create(typeDef: EnumValues): Readonly> { const descriptor = {configurable: false, enumerable: false, writable: false}; const enumType = {}; Reflect.defineProperty(enumType, isEnum, {...descriptor, value: true}); @@ -59,7 +50,7 @@ export abstract class Enum { Reflect.defineProperty(enumType, name, {...descriptor, value: method}); } - return Object.freeze(enumType as (EnumLike & EnumMethods)); + return Object.freeze(enumType as EnumType); } /** @@ -211,3 +202,18 @@ export interface EnumMethods { */ values(): T[]; } + +/** + * Defines the methods and values of an enumerated type. + * @typeparam T The type of the enumerated values. + */ +export type EnumType = EnumMethods & EnumValues; + +/** A value of an enumerated type. */ +export type EnumValue = boolean|number|string; + +/** + * Defines the values of an enumerated type. + * @typeparam T The type of the enumerated values. + */ +export type EnumValues = Record;