UNPKG

rivo

Version:

🤖 The ultimate library you need for composable type-level programming in TypeScript, powered by HKT.

37 lines (33 loc) • 1.14 kB
// @ts-ignore - Only used in doc comments import type { Reject } from "./Reject"; // @ts-ignore - Only used in doc comments import type RejectFn from "./Reject"; import type { Args, Call1W, Fn1, GenericFn, GenericResolver, Param0 } from "../HKT"; /** * Filter a union based on a predicate. * * Sig: `<T>(pred: (x: T) => boolean, u: UnionOf<T>) => UnionOf<T>` * * @see {@link Reject} for the opposite. */ export type Filter<Pred extends Fn1<never, boolean>, U> = U extends U ? Call1W<Pred, U> extends true ? U : never : never; interface Resolver extends GenericResolver<[Fn1<never, boolean>, unknown], unknown> { on1_: ([pred]: Args<this>) => [[Param0<typeof pred>], Param0<typeof pred>]; on_1: ([, u]: Args<this>) => [[Fn1<typeof u, boolean>], typeof u]; on11: ([pred, u]: Args<this>) => [[], typeof u]; } /** * [Fn] Filter a union based on a predicate. * * Sig: `<T>(pred: (x: T) => boolean, u: UnionOf<T>) => UnionOf<T>` * * @see {@link RejectFn} for the opposite. */ export default interface FilterFn extends GenericFn<Resolver> { def: ([pred, u]: Args<this>) => Filter<typeof pred, typeof u>; }