Skip to content

Commit 76a8a57

Browse files
feat(last): Observable<T>.last() can take type guard as the predicate function
1 parent f99ca49 commit 76a8a57

File tree

1 file changed

+6
-0
lines changed

1 file changed

+6
-0
lines changed

src/operator/last.ts

+6
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,15 @@ export function last<T, R>(predicate?: (value: T, index: number, source: Observa
2626
return this.lift(new LastOperator(predicate, resultSelector, defaultValue, this));
2727
}
2828

29+
// We can cast `T -> R` in it if we pass the result selector.
30+
// Therefore we don't provide the signature which takes both a type guard function
31+
// as the predicate and the result selector.
32+
// (see #1936)
2933
export interface LastSignature<T> {
3034
(predicate?: (value: T, index: number, source: Observable<T>) => boolean): Observable<T>;
35+
<S extends T>(predicate?: (value: T, index: number, source: Observable<T>) => value is S): Observable<S>;
3136
(predicate: (value: T, index: number, source: Observable<T>) => boolean, resultSelector: void, defaultValue?: T): Observable<T>;
37+
<S extends T>(predicate: (value: T, index: number, source: Observable<T>) => value is S, resultSelector: void, defaultValue?: S): Observable<S>;
3238
<R>(predicate?: (value: T, index: number, source: Observable<T>) => boolean, resultSelector?: (value: T, index: number) => R,
3339
defaultValue?: R): Observable<R>;
3440
}

0 commit comments

Comments
 (0)