UNPKG

@decentra/enums

Version:

An enums helper written in JS 2022

48 lines (40 loc) 1.69 kB
export declare class Enum { readonly name: string; readonly value: (number | string); readonly asNumber: number; readonly asString: string; readonly isNumber: boolean; constructor(name: string, value?: (string | number)); [Symbol.toStringTag](): string; toString(): string; [Symbol.toPrimitive](): string | number; valueOf(): string | number; } export type EnumConstructor<T extends Enum> = { name: string; new (name: string, value?: (number | string)): T; }; export type EnumerationValues<T, TValues> = { [name in keyof TValues]: T; }; export interface EnumResolverFunc<T extends Enum, TValues> { (key: keyof TValues):T; (value:string):T; (value:number):T; (item:T):T; } export declare function makeEnumeration<T extends Enum, TValues>(ctr: { name: string; new (name: string, value?: (string | number)): T; }, values: TValues): [EnumerationValues<T, TValues>, EnumResolverFunc<T, TValues>, ReadonlyArray<T>]; export declare const INCREMENT:Symbol; export class EnumResolver<T extends Enum, TValues> { constructor(ctr:EnumConstructor<T>, values:EnumerationValues<T,TValues>); get values():EnumerationValues<T, TValues>; byName(name:string, optional?:boolean):T; byNumericValue(value:number, optional?:boolean):T; byNameOrValue(value:string, optional?:boolean):T; byKey(key:keyof TValues|any, optional?:boolean):T; resolve(entryKeyNameOrValue:(T|number|string|keyof TValues|any), optional):T; } export function produceEnumeration<T extends Enum, TValues>(ctr, values):[EnumerationValues<T, TValues>, EnumResolver<T, TValues>];