find-closest
Version:
Like Array.prototype.find, but for finding the closest match.
20 lines (19 loc) • 900 B
TypeScript
export interface Finder<R extends 'value' | 'index'> {
(collection: readonly number[], target: number, filterMapFn?: FilterMapFn<number>): number;
<T>(collection: readonly T[], target: number, filterMapFn: FilterMapFn<T, false>): R extends 'value' ? T : number;
}
/**
* A type for underling functions that implement the overloaded
* function signature `Finder`.
*
* This helps avoid "implicit 'any'" warnings - we don't need to define
* these arguments over and over.
*
* If there's a better way to do this, please tell me!
*/
export declare type FinderNonOverloaded<R extends 'value' | 'index'> = <T>(collection: readonly T[], target: number, filterMapFn?: FilterMapFn<T>) => R extends 'value' ? T : number;
export declare type FilterMapFn<T, R extends boolean = boolean> = (value: T, context: {
index: number;
target: number;
collection: readonly T[];
}) => number | R;