toolset.io
Version:
203 lines (202 loc) • 7.02 kB
TypeScript
/**
* 如果一个值不为数组,则将其转换为数组
*
* @param value 指定的值
*
* @returns 原始数组或转换后的数组
*/
export declare function ensureArray<T>(value: T | T[]): T[];
/**
* 如果一个值为函数,则执行它并返回结果,否则返回其本身
*
* @param value 指定的值
* @param args 若为函数时,传入的参数
*
* @returns 原始值或函数执行结果
*/
export declare function callIfFunc<T, P extends any[] = any[]>(value: T | ((...args: P) => T), ...args: P): T;
/**
* 将路径中的 `\` 替换为 `/`
*
* @param path 指定的路径
*
* @returns 替换后的路径
*/
export declare function normalizePath(path: string): string;
/**
* 获取字符串的最后一个字符
*
* @param value 指定的字符串
*
* @returns 最后一个字符
*/
export declare function getLast(value: string): string | undefined;
/**
* 获取数组的最后一个元素
*
* @param value 指定的数组
*
* @returns 最后一个元素
*/
export declare function getLast<T>(value: T[]): T | undefined;
/**
* 根据数组元素中某个或多个属性的值转换为映射对象
*
* @param list 需要被转换的数组
* @param prop 需要被转换的属性或提供一个读取方法
* @param accessor 映射的值的读取方法,默认返回元素本身
* @param isMap 是否使用 Map 对象储存结果
*
* @returns 转换后的映射对象
*/
export declare function listToMap<T = any, O = T>(list: T[], prop: keyof T | ((item: T) => any), accessor?: (item: T) => O, isMap?: false): Record<string, O>;
export declare function listToMap<T = any, O = T, K extends keyof T = keyof T>(list: T[], prop: K, accessor?: (item: T) => O, isMap?: true): Map<T[K], O>;
export declare function listToMap<T = any, O = T, K = any>(list: T[], prop: (item: T) => K, accessor?: (item: T) => O, isMap?: true): Map<K extends keyof T ? T[K] : unknown, O>;
export {
/** @deprecated please use listToMap to replace it */
listToMap as transformListToMap };
/**
* 移除数组中的某个元素
*
* @param array 需要被移除元素的数组
* @param item 需要被移除的元素, 或一个查找方法,如果元素为函数时则需要做一层简单包装
* @param isFn 标记数组的元素是否为函数
*
* @returns 被移除的元素
*/
export declare function removeArrayItem<T = any>(array: T[], item: T | ((item: T) => boolean), isFn?: boolean): T | null;
/**
* 按照一定顺序的属性对数据进行分组
*
* @param list 需要分数的数据
* @param props 需要按顺序分组的属性
*
* @returns 分组后的对象
*/
export declare function groupByProps<T = any>(list: T[], props?: Array<string | ((item: T) => any)> | string | ((item: T) => any)): Record<string, T[]>;
export interface TreeOptions<T = string> {
keyField?: T;
childField?: T;
parentField?: T;
/** 若指定,`parent` 值等于 `rootId` 的节点被认为是顶级节点 */
rootId?: any;
}
/**
* 将一个展平的列表转换为树
*
* @param list 要转换的列表
* @param options 转换的配置项
*
* @returns 转换后的树
*/
export declare function transformTree<T = any>(list: T[], options?: TreeOptions<keyof T>): T[];
export { transformTree as buildTree };
/**
* 将一个树展平成列表
*
* @param tree 要展平的树
* @param options 转换的配置项
*
* @returns 展平后的列表
*/
export declare function flatTree<T = any>(tree: T[], options?: TreeOptions<keyof T> & {
/** 是否为深度优先遍历 */
depthFirst?: boolean;
/**
* 是否为无 ID 的节点插入 ID 值
*
* @default true
*/
injectId?: boolean;
/** 构建节点的 ID 的方法 */
buildId?: (index: number) => any;
/** 过滤节点的方法 */
filter?: (item: T) => boolean;
/** 过滤的结果是否会影响其子级 */
cascaded?: boolean;
/** 是否强制为节点插入 ID 值 */
forceInject?: boolean;
}): T[];
/**
* 遍历树并为每个节点执行回调方法
*
* @param tree 要遍历的树
* @param cb 回调函数
* @param options 遍历的配置项
*/
export declare function walkTree<T = any>(tree: T[], cb: (item: T, depth: number, parent: T | null) => void, options?: {
/** 是否为深度优先遍历 */
depthFirst?: boolean;
childField?: keyof T;
}): void;
/**
* 遍历树并为每个节点执行回调方法,并用其返回值构建一颗新的树
*
* @param tree 要遍历的树
* @param cb 回调函数
* @param options 遍历的配置项
*
* @returns 构建后新的树
*/
export declare function mapTree<T = any, R = any>(tree: T[], cb: (item: T, depth: number, parent: T | null) => R, options?: {
/** 是否为深度优先遍历 */
depthFirst?: boolean;
childField?: keyof T;
/** 是否强制重置 `children` 字段 */
clearChildren?: boolean;
}): R[];
/**
* 遍历树并为每个节点执行过滤方法,并用符合条件的节点构建一棵新的树
*
* @param tree 要遍历的树
* @param cb 过滤的方法
* @param options 遍历的配置项
*
* @returns 过滤后新的树
*/
export declare function filterTree<T = any>(tree: T[], cb: (item: T, depth: number, parent: T | null) => boolean, options?: {
/** 判断一个节点是否为叶子节点 */
isLeaf?: (item: T) => boolean;
/** 是否只对叶子节点进行过滤 */
leafOnly?: boolean;
childField?: keyof T;
}): T[];
export interface SortOptions<T = string> {
/** 属性名 */
key: T;
/** 排序方法 */
method?: (prev: any, next: any) => number;
/** 读取方法 */
accessor?: (...args: any[]) => any;
/** 升降序 */
type?: 'asc' | 'desc';
/** 传入读取器的额外参数 */
params?: any[];
}
/**
* 根据依赖的属性对数组逐层排序
*
* @param list 需要排序的数组
* @param props 排序依赖的属性
*
* @returns 排序后的数组
*/
export declare function sortByProps<T = any>(list: T[], props: keyof T | SortOptions<keyof T> | (keyof T | SortOptions<keyof T>)[]): T[];
/**
* 将两个对象进行深度的动态合并
*
* @param sourceObj 用于接收合并的源对象
* @param targetObj 被合并的对象,当属性名相同但值类型不同的情况,此对象的权重更高
* @param isNewObj 标记合并至一个全新的对象(深度的)
*
* @returns 合并后的对象
*/
export declare function mergeObjects<T extends Record<string, any>, U extends Record<string, any>>(sourceObj: T, targetObj: U, isNewObj?: boolean): T & U;
/**
* 将一个任务队列按每帧一次依次指定,返回一个触发取消的方法
*
* @param queue 任务队列
*
* @returns 终止队列执行的方法
*/
export declare function runQueueFrame(queue: Array<() => void>): () => boolean;