forked from ReactiveX/rxjs
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathObservable-spec.ts
103 lines (79 loc) · 4.12 KB
/
Observable-spec.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
import { Observable, of, OperatorFunction } from 'rxjs';
import { mapTo } from 'rxjs/operators';
function a<I extends string, O extends string>(input: I, output: O): OperatorFunction<I, O>;
function a<I, O extends string>(output: O): OperatorFunction<I, O>;
function a<I, O extends string>(inputOrOutput: I | O, output?: O): OperatorFunction<I, O> {
return mapTo<I, O>(output === undefined ? inputOrOutput as O : output);
}
describe('pipe', () => {
it('should infer for no arguments', () => {
const o = of('foo').pipe(); // $ExpectType Observable<string>
});
it('should infer for 1 argument', () => {
const o = of('foo').pipe(a('1')); // $ExpectType Observable<"1">
});
it('should infer for 2 arguments', () => {
const o = of('foo').pipe(a('1'), a('2')); // $ExpectType Observable<"2">
});
it('should infer for 3 arguments', () => {
const o = of('foo').pipe(a('1'), a('2'), a('3')); // $ExpectType Observable<"3">
});
it('should infer for 4 arguments', () => {
const o = of('foo').pipe(a('1'), a('2'), a('3'), a('4')); // $ExpectType Observable<"4">
});
it('should infer for 5 arguments', () => {
const o = of('foo').pipe(a('1'), a('2'), a('3'), a('4'), a('5')); // $ExpectType Observable<"5">
});
it('should infer for 6 arguments', () => {
const o = of('foo').pipe(a('1'), a('2'), a('3'), a('4'), a('5'), a('6')); // $ExpectType Observable<"6">
});
it('should infer for 7 arguments', () => {
const o = of('foo').pipe(a('1'), a('2'), a('3'), a('4'), a('5'), a('6'), a('7')); // $ExpectType Observable<"7">
});
it('should infer for 8 arguments', () => {
const o = of('foo').pipe(a('1'), a('2'), a('3'), a('4'), a('5'), a('6'), a('7'), a('8')); // $ExpectType Observable<"8">
});
it('should infer for 9 arguments', () => {
const o = of('foo').pipe(a('1'), a('2'), a('3'), a('4'), a('5'), a('6'), a('7'), a('8'), a('9')); // $ExpectType Observable<"9">
});
it('should infer {} for more than 9 arguments', () => {
const o = of('foo').pipe(a('1'), a('2'), a('3'), a('4'), a('5'), a('6'), a('7'), a('8'), a('9'), a('10')); // $ExpectType Observable<{}>
});
it('should require a type assertion for more than 9 arguments', () => {
const o: Observable<'10'> = of('foo').pipe(a('1'), a('2'), a('3'), a('4'), a('5'), a('6'), a('7'), a('8'), a('9'), a('10')); // $ExpectError
});
it('should enforce types for the 1st argument', () => {
const o = of('foo').pipe(a('#', '1')); // $ExpectError
});
it('should enforce types for the 2nd argument', () => {
const o = of('foo').pipe(a('1'), a('#', '2')); // $ExpectError
});
it('should enforce types for the 3rd argument', () => {
const o = of('foo').pipe(a('1'), a('2'), a('#', '3')); // $ExpectError
});
it('should enforce types for the 4th argument', () => {
const o = of('foo').pipe(a('1'), a('2'), a('3'), a('#', '4')); // $ExpectError
});
it('should enforce types for the 5th argument', () => {
const o = of('foo').pipe(a('1'), a('2'), a('3'), a('4'), a('#', '5')); // $ExpectError
});
it('should enforce types for the 6th argument', () => {
const o = of('foo').pipe(a('1'), a('2'), a('3'), a('4'), a('5'), a('#', '6')); // $ExpectError
});
it('should enforce types for the 7th argument', () => {
const o = of('foo').pipe(a('1'), a('2'), a('3'), a('4'), a('5'), a('6'), a('#', '7')); // $ExpectError
});
it('should enforce types for the 8th argument', () => {
const o = of('foo').pipe(a('1'), a('2'), a('3'), a('4'), a('5'), a('6'), a('7'), a('#', '8')); // $ExpectError
});
it('should enforce types for the 9th argument', () => {
const o = of('foo').pipe(a('1'), a('2'), a('3'), a('4'), a('5'), a('6'), a('7'), a('8'), a('#', '9')); // $ExpectError
});
it('should not enforce types beyond the 9th argument', () => {
const o = of('foo').pipe(a('1'), a('2'), a('3'), a('4'), a('5'), a('6'), a('7'), a('8'), a('9'), a('#', '10')); // $ExpectType Observable<{}>
});
it('should support operators that return generics', () => {
const customOperator = () => <T>(a: Observable<T>) => a;
const o = of('foo').pipe(customOperator()); // $ExpectType Observable<string>
});
});