ts-lib-extended
Version:
Additional types and tools for typescript
98 lines (97 loc) • 2.49 kB
TypeScript
import type { Prettify } from './mapping.js';
/**
* enum type representation
*
* ```ts
* enum MyEnum { a, b }
*
* function doMagic(enum: Enumerable): void { ... }
*
* doMagic(MyEnum)
* ```
*
* @export
* @since 1.0.0
*/
export type Enumerable = {
[id: string]: number | string;
[nu: number]: string;
};
/**
* enum values type
*
* ```
* enum MyEnum { a, b }
* EnumerableValue<typeof MyEnum> => MyEnum.a | MyEnum.b
* ```
*
* @export
* @template {Enumerable} TEnum
* @since 1.1.5
*/
export type EnumerableValue<TEnum extends Enumerable> = Prettify<TEnum[keyof TEnum]>;
/**
* enum values base type
*
* ```
* String Enum => string
* Numeric Enum => number
* Heterogeneous Enum => string | number
* ```
*
* @export
* @template {EnumerableValue<Enumerable>} TEnumValue
* @since 1.1.5
*/
export type EnumerableBase<TEnumValue extends EnumerableValue<Enumerable>> = TEnumValue extends string ? TEnumValue extends number ? string | number : string : TEnumValue extends number ? number : never;
/**
* tuple of enum key and associated value
*
* @export
* @template {Enumerable} E
* @since 1.2.0
*/
export type EnumerableEntry<E extends Enumerable> = {
[key in keyof E]: [key, E[key]];
} extends Record<PropertyKey, infer P> ? Exclude<P, [number, string]> : never;
/**
* Gain keys and values from enum instances. Works with string, numeric and mixed enums
* (properly ignoring the numeric index reverse lookup entries for numeric enums)
*
* @export
* @class EnumerableObject
* @since 1.2.0
*/
export declare class EnumerableObject {
/**
* Gain enum values (equivalent to Object.values(...))
*
* @public
* @template {Enumerable} E
* @param {E} enum_
* @returns {ReadonlyArray<EnumerableValue<E>>}
* @since 1.2.0
*/
values<E extends Enumerable>(enum_: E): ReadonlyArray<EnumerableValue<E>>;
/**
* Gain enum keys (equivalent to Object.keys(...))
*
* @public
* @template {Enumerable} E
* @param {E} enum_
* @returns {ReadonlyArray<keyof E>}
* @since 1.2.0
*/
keys<E extends Enumerable>(enum_: E): ReadonlyArray<keyof E>;
/**
* Gain enum entries (equivalent to Object.entries(...))
*
* @public
* @template {Enumerable} E
* @param {E} enum_
* @returns {ReadonlyArray<EnumerableEntry<E>>}
* @since 1.2.0
*/
entries<E extends Enumerable>(enum_: E): ReadonlyArray<EnumerableEntry<E>>;
private disassemble;
}