enum-plus
Version:
A drop-in replacement for native enum. Like native enum but much better!
60 lines (59 loc) • 4.41 kB
TypeScript
import type { EnumExtension } from 'enum-plus/extension';
import type { EnumInitOptions } from './enum';
import type { EnumItemClass, EnumItemOptions } from './enum-item';
import type { EnumItemFields, InheritableEnumItems, MapResult, ToListConfig, ToMapConfig } from './enum-items';
import { EnumItemsArray } from './enum-items';
import type { EnumInit, EnumKey, EnumValue, FindEnumKeyByValue, ListItem, PrimitiveOf, ValueTypeFromSingleInit } from './types';
import { ENUM_OPTIONS, IS_ENUM } from './utils';
/**
* - **EN:** Enum collection extension base class, used to extend the Enums
* - **CN:** 枚举集合扩展基类,用于扩展枚举
*/
export declare class EnumExtensionClass<T extends EnumInit<K, V>, K extends EnumKey<T> = EnumKey<T>, V extends EnumValue = ValueTypeFromSingleInit<T[K], K>> implements EnumExtension<T, K, V> {
}
/**
* - **EN:** Enum collection
* - **CN:** 枚举项集合
*/
export declare class EnumCollectionClass<T extends EnumInit<K, V>, K extends EnumKey<T> = EnumKey<T>, V extends EnumValue = ValueTypeFromSingleInit<T[K], K>, P = any> extends EnumExtensionClass<T, K, V> implements InheritableEnumItems<T, K, V, P> {
private readonly __options__;
private readonly __items__;
constructor(init?: T, options?: EnumInitOptions<T, K, V, P>);
/**
* - **EN:** A boolean value indicates that this is an enum collection instance.
* - **CN:** 布尔值,表示这是一个枚举集合实例
*/
get [IS_ENUM](): true;
/**
* - **EN:** Get the options to initialize the enum.
* - **CN:** 获取初始化枚举时的选项
*/
get [ENUM_OPTIONS](): EnumItemOptions<T[K], K, V, P> | undefined;
[Symbol.hasInstance]<T>(instance: T): instance is Extract<T, K | V>;
/**
* The enum collection name, supports localization. Note that it usually returns a string, but if
* a custom `localize` function is set, the return value may vary depending on the implementation
* of the method.
*
* - **CN:** 枚举集合显示名称,支持本地化。注意,通常情况下返回的是字符串,但如果设置了自定义的 `localize` 函数,则返回值可能有所不同,取决于方法的实现
*
* @returns {string | undefined} The localized name of the enum collection, or undefined if not
* set.
*/
get name(): string | undefined;
label<KV extends V | K | NonNullable<PrimitiveOf<V>> | NonNullable<PrimitiveOf<K>> | undefined>(keyOrValue: KV): (undefined extends KV ? KV & undefined : never) | (KV extends undefined ? undefined : NonNullable<KV> extends K ? T[K & KV & {}] extends {
label: unknown;
} ? T[K & KV & {}]["label"] extends undefined ? K & KV & {} : string : K & KV & {} : NonNullable<KV> extends V ? import("./types").FindLabelByValue<T, V & KV & {}, T[FindEnumKeyByValue<T, V & KV & {}>]> : PrimitiveOf<K> extends KV ? string | undefined : PrimitiveOf<V> extends KV ? string | undefined : undefined);
key<IV extends V | NonNullable<PrimitiveOf<V>> | undefined>(value?: IV): (undefined extends IV ? IV & undefined : never) | (IV extends undefined ? undefined : NonNullable<IV> extends V ? FindEnumKeyByValue<T, V & IV & {}> : PrimitiveOf<V> extends NonNullable<IV> ? K | undefined : undefined);
raw(): T;
raw<IK extends V | K | Exclude<EnumValue, string> | NonNullable<string>>(keyOrValue: IK): IK extends K ? T[IK] : IK extends V ? T[FindEnumKeyByValue<T, IK>] : T[K] | undefined;
has<KV>(keyOrValue?: KV): keyOrValue is Extract<KV, K | V>;
findBy(...rest: Parameters<EnumItemsArray<T, K, V, P>['findBy']>): any;
toList(): ListItem<V, 'value', 'label'>[];
toList<FOV extends string | ((item: EnumItemClass<T[K], K, V, P>) => string), FOL extends string | ((item: EnumItemClass<T[K], K, V, P>) => string)>(config: ToListConfig<T, FOV, FOL, K, V, never, P>): ListItem<V, FOV extends (item: EnumItemClass<T[K], K, V, P>) => infer R ? R : FOV, FOL extends (item: EnumItemClass<T[K], K, V, P>) => infer R ? R : FOL>[];
toMap(): MapResult<T, 'value', 'label', K, V, P>;
toMap<KS extends EnumItemFields | (<R extends string | symbol>(item: EnumItemClass<T[K], K, V, P>) => R), VS extends EnumItemFields | (<R>(item: EnumItemClass<T[K], K, V, P>) => R)>(config: ToMapConfig<T, KS, VS, K, V, P>): MapResult<T, KS, VS, K, V, P>;
get valueType(): V;
get keyType(): K;
get rawType(): T[K];
}