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;
        /**
         * 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[];
}
