@decentra/enums
Version:
An enums helper written in JS 2022
48 lines (40 loc) • 1.69 kB
TypeScript
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>];