import type { Collection, Dictionary, Func, List } from '@sdkset/types'; /** 假值 */ export type AnyFalsy = undefined | null | false | '' | 0; /** 去假值 */ export type Truthy = Exclude; /** 谓语函数 */ export interface Predicate { (value: T): boolean; } /** 防抖/节流选项 */ export interface DebounceOption { /** 是否在开始时调用 */ leading?: boolean; /** 是否在结束时调用 */ trailing?: boolean; /** 最大等待时间(若传递则为节流) */ maxWait?: number; } /** 解析列表类型 */ export type TypeOfList = V extends never ? unknown : V extends List ? T : never; /** 解析字典类型 */ export type TypeOfDictionary = V extends never ? unknown : V extends Dictionary ? T : TDefault; /** 解析集合类型 */ export type TypeOfCollection = V extends List ? TypeOfList : TypeOfDictionary; /** 集合类型键 */ export type CollectionKey = V extends never ? unknown : V extends List ? number : V extends Dictionary ? string : V extends undefined ? undefined : never; /** 集合迭代器 */ export interface CollectionIterator | TypeOfDictionary, TResult, V = Collection> { (element: T, key: CollectionKey, collection: V): TResult; } /** 累加集合迭代器 */ export interface MemoCollectionIterator | TypeOfDictionary, TResult, V = Collection> { (prev: TResult, curr: T, key: CollectionKey, collection: V): TResult; } /** 迭代器 */ export type Iteratee = TypeOfCollection> = CollectionIterator | (string | number)[] | Partial | string | number | undefined | null; /** 解析通用迭代器返回值 */ export type TypeOfOptimizeCb = C extends undefined ? I : A extends undefined ? (value?: unknown, index?: number | string, collection?: unknown) => unknown : A extends 1 ? (value?: unknown) => unknown : A extends 3 ? (value?: unknown, index?: number | string, collection?: unknown) => unknown : A extends 4 ? (accumulator?: unknown, value?: unknown, index?: number | string, collection?: unknown) => unknown : undefined extends C ? I : (...args: unknown[]) => unknown; /** 解析迭代器 */ export type TypeOfIteratee = I extends undefined ? (value: V) => V : I extends null ? (value: V) => V : I extends number | string | (number | string)[] ? (path: unknown) => (obj: Dictionary) => Dictionary | undefined : I extends Func ? TypeOfOptimizeCb : (attrs: Dictionary) => (object: unknown) => boolean; /** 解析迭代器返回值 */ export type IterateeResult = I extends (...args: unknown[]) => infer R ? R : I extends keyof T ? T[I] : I extends string | number | (string | number)[] ? unknown : I extends object ? boolean : I extends null | undefined ? T : never; /** 解析递归类型 */ export type DeepestListItemOrSelf = T extends List & object ? TItem extends List & object ? unknown : TItem : T; /** 解析配对类型 */ export type PairValue = T extends Readonly<[string | number, infer TValue]> ? TValue : T extends List ? TValue : never; /** 对象迭代器 */ export type ObjectIterator, TResult, V = Dictionary> = CollectionIterator; /** 属性匹配器 */ export type PropertyTypeOrAny = K extends keyof T ? T[K] : unknown;