@etsoo/shared
Version:
TypeScript shared utilities and functions
79 lines (78 loc) • 3.02 kB
TypeScript
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[];
}