import { Comparer } from "ts-comparer-builder"; import { IndexedSelector } from "../types/IndexedSelector"; /** * Selects the elements whose key value is maximal according to the comparer. * * @typeParam T - Element type produced by the source iterable. * @typeParam TKey - Key type produced by the selector and consumed by the comparer. * @param src - Source iterable to evaluate. * @param selector - Selector receiving each element and its index, producing the key used for comparison. * @param comparer - Comparer determining ordering between keys; defaults to {@link defaultComparer}. * @returns An iterable containing every element sharing the maximal key, or an empty iterable when the source is empty. * @throws Error Rethrows any error thrown by `selector` or `comparer`. * * @example * ```ts * const players = [ * { name: "Ada", score: 18 }, * { name: "Tess", score: 24 }, * { name: "Ian", score: 24 }, * ]; * const topPlayers = [..._maxBy(players, (player) => player.score)]; * console.log(topPlayers); * // [ { name: "Tess", score: 24 }, { name: "Ian", score: 24 } ] * ``` * * or using the curried version: * ```ts * const topPlayers = [ * ...pipeInto( * [ * { name: "Ada", score: 18 }, * { name: "Tess", score: 24 }, * { name: "Ian", score: 24 }, * ], * maxBy((player) => player.score) * ), * ]; * console.log(topPlayers); * // [ { name: "Tess", score: 24 }, { name: "Ian", score: 24 } ] * ``` */ export declare function _maxBy(src: Iterable, selector: IndexedSelector, comparer?: Comparer): Iterable; /** * Curried version of {@link _maxBy}. */ export declare const maxBy: (selector: IndexedSelector, comparer?: Comparer | undefined) => (src: Iterable) => Iterable;