Skip to content

Commit ec71a49

Browse files
committed
fix(filter): Support narrowing by type predicate
1 parent 85fd83b commit ec71a49

File tree

4 files changed

+28
-0
lines changed

4 files changed

+28
-0
lines changed

async/filter.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1+
export function filter<T>(
2+
iterable: Iterable<T> | AsyncIterable<T>,
3+
fn: (value: T, index: number) => boolean | Promise<boolean>,
4+
): AsyncIterable<T>;
5+
export function filter<T, U extends T>(
6+
iterable: Iterable<T> | AsyncIterable<T>,
7+
fn: (value: T, index: number) => value is U,
8+
): AsyncIterable<U>;
19
/**
210
* Filters an iterable based on a function.
311
*

filter.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1+
export function filter<T>(
2+
iterable: Iterable<T>,
3+
fn: (value: T, index: number) => boolean,
4+
): Iterable<T>;
5+
export function filter<T, U extends T>(
6+
iterable: Iterable<T>,
7+
fn: (value: T, index: number) => value is U,
8+
): Iterable<U>;
19
/**
210
* Filters an iterable based on a function.
311
*

pipe/async/filter.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
import { filter as base } from "../../async/filter.ts";
22

3+
export function filter<T>(
4+
fn: (value: T, index: number) => boolean | Promise<boolean>,
5+
): (iterable: Iterable<T> | AsyncIterable<T>) => AsyncIterable<T>;
6+
export function filter<T, U extends T>(
7+
fn: (value: T, index: number) => value is U,
8+
): (iterable: Iterable<T> | AsyncIterable<T>) => AsyncIterable<U>;
39
/**
410
* Returns an operator that filters an iterable based on a function.
511
*

pipe/filter.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
import { filter as base } from "../filter.ts";
22

3+
export function filter<T>(
4+
fn: (value: T, index: number) => boolean,
5+
): (iterable: Iterable<T>) => Iterable<T>;
6+
export function filter<T, U extends T>(
7+
fn: (value: T, index: number) => value is U,
8+
): (iterable: Iterable<T>) => Iterable<U>;
39
/**
410
* Returns an operator that filters an iterable based on a function.
511
*

0 commit comments

Comments
 (0)