Skip to content

Commit c31e7a9

Browse files
committed
chore(typings): fix first/last typings
1 parent dc9d4d6 commit c31e7a9

File tree

6 files changed

+33
-16
lines changed

6 files changed

+33
-16
lines changed

compat/operator/first.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
import { Observable } from 'rxjs';
22
import { first as higherOrder } from 'rxjs/operators';
33

4-
export function first<T>(this: Observable<T>, predicate?: (value: T, index: number, source: Observable<T>) => boolean,
5-
defaultValue?: T): Observable<T>;
4+
/* tslint:disable:max-line-length */
5+
export function first<T>(this: Observable<T>, predicate?: null, defaultValue?: T): Observable<T>;
6+
export function first<T, S extends T>(this: Observable<T>, predicate: (value: T, index: number, source: Observable<T>) => value is S, defaultValue?: T): Observable<S>;
7+
export function first<T>(this: Observable<T>, predicate: (value: T, index: number, source: Observable<T>) => boolean, defaultValue?: T): Observable<T>;
8+
/* tslint:enable:max-line-length */
9+
610
/**
711
* Emits only the first value (or the first value that meets some condition)
812
* emitted by the source Observable.
@@ -47,5 +51,5 @@ export function first<T>(this: Observable<T>, predicate?: (value: T, index: numb
4751
* @owner Observable
4852
*/
4953
export function first<T>(this: Observable<T>, ...args: any[]): Observable<T> {
50-
return higherOrder<T>(...args)(this);
51-
}
54+
return higherOrder<T>(...args)(this);
55+
}

compat/operator/last.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
import { Observable } from 'rxjs';
22
import { last as higherOrder } from 'rxjs/operators';
33

4-
export function last<T>(this: Observable<T>, predicate?: (value: T, index: number, source: Observable<T>) => boolean,
5-
defaultValue?: T): Observable<T>;
4+
/* tslint:disable:max-line-length */
5+
export function last<T>(this: Observable<T>, predicate?: null, defaultValue?: T): Observable<T>;
6+
export function last<T, S extends T>(this: Observable<T>, predicate: (value: T, index: number, source: Observable<T>) => value is S, defaultValue?: T): Observable<S>;
7+
export function last<T>(this: Observable<T>, predicate: (value: T, index: number, source: Observable<T>) => boolean, defaultValue?: T): Observable<T>;
8+
/* tslint:enable:max-line-length */
69
/**
710
* Returns an Observable that emits only the last item emitted by the source Observable.
811
* It optionally takes a predicate function as a parameter, in which case, rather than emitting

spec/operators/first-spec.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,12 @@ describe('Observable.prototype.first', () => {
217217
// missing predicate preserves the type
218218
xs.pipe(first()).subscribe(x => x); // x is still string | number
219219

220+
// null predicate preserves the type
221+
xs.pipe(first(null)).subscribe(x => x); // x is still string | number
222+
223+
// undefined predicate preserves the type
224+
xs.pipe(first(undefined)).subscribe(x => x); // x is still string | number
225+
220226
// After the type guard `first` predicates, the type is narrowed to string
221227
xs.pipe(first(isString))
222228
.subscribe(s => s.length); // s is string

spec/operators/last-spec.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,12 @@ describe('Observable.prototype.last', () => {
160160
// missing predicate preserves the type
161161
xs.pipe(last()).subscribe(x => x); // x is still string | number
162162

163+
// null predicate preserves the type
164+
xs.pipe(last(null)).subscribe(x => x); // x is still string | number
165+
166+
// undefined predicate preserves the type
167+
xs.pipe(last(undefined)).subscribe(x => x); // x is still string | number
168+
163169
// After the type guard `last` predicates, the type is narrowed to string
164170
xs.pipe(last(isString))
165171
.subscribe(s => s.length); // s is string

src/internal/operators/first.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,16 @@ import { throwIfEmpty } from './throwIfEmpty';
1010
import { identity } from '../util/identity';
1111

1212
/* tslint:disable:max-line-length */
13-
export function first<T>(): MonoTypeOperatorFunction<T>;
1413
export function first<T>(
15-
predicate: null | undefined,
16-
defaultValue: T
14+
predicate?: null,
15+
defaultValue?: T
1716
): MonoTypeOperatorFunction<T>;
1817
export function first<T, S extends T>(
19-
predicate?: (value: T, index: number, source: Observable<T>) => value is S,
18+
predicate: (value: T, index: number, source: Observable<T>) => value is S,
2019
defaultValue?: T
2120
): OperatorFunction<T, S>;
2221
export function first<T>(
23-
predicate?: (value: T, index: number, source: Observable<T>) => boolean,
22+
predicate: (value: T, index: number, source: Observable<T>) => boolean,
2423
defaultValue?: T
2524
): MonoTypeOperatorFunction<T>;
2625
/* tslint:enable:max-line-length */

src/internal/operators/last.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,16 @@ import { defaultIfEmpty } from './defaultIfEmpty';
1010
import { identity } from '../util/identity';
1111

1212
/* tslint:disable:max-line-length */
13-
export function last<T>(): MonoTypeOperatorFunction<T>;
1413
export function last<T>(
15-
predicate: null | undefined,
16-
defaultValue: T
14+
predicate?: null,
15+
defaultValue?: T
1716
): MonoTypeOperatorFunction<T>;
1817
export function last<T, S extends T>(
19-
predicate?: (value: T, index: number, source: Observable<T>) => value is S,
18+
predicate: (value: T, index: number, source: Observable<T>) => value is S,
2019
defaultValue?: T
2120
): OperatorFunction<T, S>;
2221
export function last<T>(
23-
predicate?: (value: T, index: number, source: Observable<T>) => boolean,
22+
predicate: (value: T, index: number, source: Observable<T>) => boolean,
2423
defaultValue?: T
2524
): MonoTypeOperatorFunction<T>;
2625
/* tslint:enable:max-line-length */

0 commit comments

Comments
 (0)