@tsdotnet/linq
Version:
A familiar set of functions that operate on JavaScript iterables (ES2015+) in a similar way to .NET's LINQ does with enumerables.
19 lines (18 loc) • 1.14 kB
TypeScript
import type { PredicateWithIndex, SelectorWithIndex } from "@tsdotnet/common-interfaces";
import { IterableFilter, IterableTransform, IterableValueTransform } from "./IterableTransform";
export default abstract class LinqBase<T, TLinq extends LinqBase<T, TLinq>> implements Iterable<T> {
protected readonly source: Iterable<T>;
protected readonly create: (source: Iterable<T>) => TLinq;
constructor(source: Iterable<T>, create: (source: Iterable<T>) => TLinq);
[Symbol.iterator](): Iterator<T>;
filter(filter: IterableFilter<T>): TLinq;
filterWith(...filters: IterableFilter<T>[]): TLinq;
applyFilters(filters: Iterable<IterableFilter<T>>): TLinq;
where(predicate: PredicateWithIndex<T>): TLinq;
resolve<TResolution>(resolver: IterableTransform<T, TResolution>): TResolution;
transform<TResult>(transform: IterableValueTransform<T, TResult>): Iterable<TResult>;
select<TResult>(selector: SelectorWithIndex<T, TResult>): Iterable<TResult>;
selectMany<TResult>(selector: SelectorWithIndex<T, Iterable<TResult>>): Iterable<TResult>;
skip(count: number): TLinq;
take(count: number): TLinq;
}