@msom/common
Version:
@msom/common
152 lines • 5.2 kB
TypeScript
import { Nullable, createFunction } from "../global";
export declare class AnyMap<V = any> {
private originMap;
private objectMap;
constructor();
private getMap;
get(key: unknown): V | undefined;
set(key: unknown, value: V): this;
has(key: unknown): boolean;
delete(key: unknown): boolean;
clear(): void;
}
/** 集合事件类型定义 */
export type CollectionEvent = Record<never, never>;
/** 集合键类型,可以是字符串或数字 */
export type CollectionKey = string | number | symbol;
/**
* 获取集合元素键值的函数类型
* @template T 元素类型
*/
export type CollectionGetKey<T = unknown> = (data: T) => CollectionKey;
/**
* 数组转换接口定义
* @template T 元素类型
*/
interface ToArray<T = unknown> {
/**
* 将集合转换为数组(不带映射器)
* @param filter 可选的过滤函数
* @param mapper 可选的映射函数(此重载中不使用)
*/
toArray(filter?: Nullable | createFunction<[T, CollectionKey, this, boolean]>, mapper?: Nullable): T[];
/**
* 将集合转换为数组(带映射器)
* @template RT 映射后的类型
* @param filter 可选的过滤函数
* @param mapper 可选的映射函数
*/
toArray<RT>(filter?: Nullable | createFunction<[T, CollectionKey, this, boolean]>, mapper?: createFunction<[T, CollectionKey, this, RT]>): RT[];
}
/**
* 集合类,提供基于键值的元素存储和管理
* @template T 元素类型
*/
export declare class Collection<T = unknown> implements Iterable<T>, ToArray<T> {
/** 获取元素键值的函数 */
private getKey;
/** 存储所有元素的数组 */
private elements;
/** 键值到数组索引的映射 */
private indexMap;
/**
* 创建集合实例
* @param getKey 获取元素键值的函数
*/
constructor(getKey?: CollectionGetKey<T>);
/**
* 获得集合的实际元素数量
*/
size(): number;
/**
*
* @param key
* @returns 存在返回下标,不存在返回-1
*/
private getIndex;
/**
* 根据键值获取元素
* @param key 元素的键值
* @returns 对应的元素或undefined
*/
get(key: CollectionKey): T;
/**
* 检查是否存在指定键值的元素
* @param key 要检查的键值
* @returns 是否存在
*/
hasKey(key: CollectionKey): boolean;
/**
* 检查元素是否在集合中
* @param element 要检查的元素
* @returns 是否存在
*/
hasElement(element: T): boolean;
/**
* 添加元素到集合
* @param element 要添加的元素
* @param force 当元素已存在时是否强制替换,默认为false
*/
add(element: T, force?: boolean): void;
/**
* 使用指定的键值添加元素
* @param key 指定的键值
* @param element 要添加的元素
* @param force 当键值已存在时是否强制替换,默认为false
*/
addKey(key: CollectionKey, element: T, force?: boolean): void;
/**
* 批量添加元素
* @param iterator 可迭代的元素集合
* @param force 当元素已存在时是否强制替换,默认为false
*/
addAll(iterator: Iterable<T>, force?: boolean): void;
/**
* 在指定位置插入元素
* @param element 待插入的元素
* @param index 插入位置,范围[0, length]。如果超出范围会被自动调整到有效范围内
* @param force 当元素已存在时的处理选项
* @param exist.index 是否保持原有元素的位置。true: 保持原位置,false: 使用新位置
* @param exist.element 是否使用新元素替换原有元素。true: 使用新元素,false: 保持原有元素
*/
insert(element: T, index: number, force?: {
newIndex?: boolean;
newElement?: boolean;
} | boolean): void;
/**
* 移除指定元素
* @param element 要移除的元素
* @returns 是否成功移除
*/
removeElement(element: T): boolean;
/**
* 根据键值移除元素
* @param key 要移除的元素的键值
* @returns 被移除的元素,如果元素不存在则返回undefined
*/
remove(key: CollectionKey): T | undefined;
/**
* 清空集合中的所有元素
*/
clear(): void;
/**
* 更新索引映射
* 当元素数组发生变化时,需要重新计算每个元素的索引
* @private
*/
private updateIndexMap;
/**
* 实现Iterable接口,使集合可以被迭代
* 使用生成器函数遍历集合中的所有元素
* @yields 集合中的每个元素
*/
[Symbol.iterator](): Iterator<T, T, undefined>;
/**
* 遍历集合中的所有元素
* @param handler 处理每个元素的回调函数,(element, key, index, this): void
*/
each(handler: createFunction<[T, CollectionKey, number, this, void]>): void;
toArray<RT = T>(filter?: Nullable | createFunction<[T, CollectionKey, this, boolean]>, mapper?: Nullable | createFunction<[T, CollectionKey, this, RT]>): RT[];
}
export {};
//# sourceMappingURL=index.d.ts.map