UNPKG

@etsoo/shared

Version:

TypeScript shared utilities and functions

79 lines (78 loc) 3.02 kB
import { DataTypes } from "./DataTypes"; declare global { interface Array<T> { /** * Items do not exist in target array or reverse match * @param target Target array * @param round A round for both matches */ different(target: Array<T>, round?: boolean): Array<T>; /** * Get max number item or number item property * @param field Object field to calculate */ max(...field: T extends number ? [undefined?] : T extends object ? [DataTypes.Keys<T, number>] : [never]): number; /** * Get max field value item * @param field Object field to calculate */ maxItem(field: T extends object ? DataTypes.Keys<T, number> : never): T | undefined; /** * Get min number item or number item property * @param field Object field to calculate */ min(...field: T extends number ? [undefined?] : T extends object ? [DataTypes.Keys<T, number>] : [never]): number; /** * Get min field value item * @param field Object field to calculate */ minItem(field: T extends object ? DataTypes.Keys<T, number> : never): T | undefined; /** * Remove items by value or condition * @param items Items to remove */ remove(...items: ((T & (DataTypes.Basic | object)) | ((item: T) => boolean))[]): T[]; /** * Sort by property * @param property Property * @param values Property values */ sortByProperty<P extends keyof T>(property: P, values: T[P][]): T[]; /** * Sum number items or number item properties * @param field Object field to calculate */ sum(...field: T extends number ? [undefined?] : T extends object ? [DataTypes.Keys<T, number>] : [never]): number; /** * Toggle item in array * @param item Item to toggle * @param add If true, add the item, otherwise remove it * @param idField If item is an object, use this field to check for existence */ toggleItem<const A extends true | false, const F = T extends object ? keyof T : never>(item: T | (F extends keyof T ? (A extends true ? T : T | T[F]) : T), add: A, idField?: F): Array<T>; /** * Make all items are unique * @param this Input array */ toUnique(): Array<T>; } } /** * Array Utilities */ export declare namespace ArrayUtils { /** * Array 1 items do not exist in Array 2 or reverse match * @param a1 Array 1 * @param a2 Array 2 * @param round A round for both matches */ function differences<T>(a1: T[], a2: T[], round?: boolean): T[]; /** * Merge arrays, remove duplicates, and sort by the first array * @param sort Array to sort * @param param All arrays to merge * @returns Result */ function mergeArrays<T>(sort: T[], ...param: T[][]): T[]; }