Skip to content

Commit 4d74bd2

Browse files
disquisitionbrandonroberts
authored andcommitted
fix(Store): Fix type annotations for select methods (#953)
1 parent a5ebe98 commit 4d74bd2

File tree

2 files changed

+18
-18
lines changed

2 files changed

+18
-18
lines changed

modules/store/spec/edge.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ describe('ngRx Store', () => {
3838
let todosNextCount = 0;
3939
let todosCountNextCount = 0;
4040

41-
store.pipe(select<TodoAppSchema, Todo[]>('todos')).subscribe(todos => {
41+
store.pipe(select('todos')).subscribe(todos => {
4242
todosNextCount++;
4343
store.dispatch({ type: 'SET_COUNT', payload: todos.length });
4444
});

modules/store/src/store.ts

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ export class Store<T> extends Observable<T> implements Observer<Action> {
2929
key1: a,
3030
key2: b,
3131
key3: c
32-
): Store<T[a][b][c]>;
32+
): Observable<T[a][b][c]>;
3333
select<
3434
a extends keyof T,
3535
b extends keyof T[a],
@@ -62,15 +62,12 @@ export class Store<T> extends Observable<T> implements Observer<Action> {
6262
* This overload is used to support spread operator with
6363
* fixed length tuples type in typescript 2.7
6464
*/
65-
select(
66-
pathOrMapFn: ((state: T) => any) | string,
67-
...paths: string[]
68-
): Observable<any>;
65+
select<K = any>(...paths: string[]): Observable<K>;
6966
select(
7067
pathOrMapFn: ((state: T) => any) | string,
7168
...paths: string[]
7269
): Observable<any> {
73-
return select(pathOrMapFn, ...paths)(this);
70+
return select.call(null, pathOrMapFn, ...paths)(this);
7471
}
7572

7673
lift<R>(operator: Operator<T, R>): Store<R> {
@@ -111,21 +108,25 @@ export class Store<T> extends Observable<T> implements Observer<Action> {
111108
export const STORE_PROVIDERS: Provider[] = [Store];
112109

113110
export function select<T, K>(
114-
mapFn: ((state: T) => K) | string
111+
mapFn: (state: T) => K
115112
): (source$: Observable<T>) => Observable<K>;
116113
export function select<T, a extends keyof T>(
117114
key: a
118-
): (source$: Store<a>) => Observable<T[a]>;
115+
): (source$: Observable<T>) => Observable<T[a]>;
119116
export function select<T, a extends keyof T, b extends keyof T[a]>(
120117
key1: a,
121118
key2: b
122-
): (source$: Store<T>) => Observable<T[a][b]>;
119+
): (source$: Observable<T>) => Observable<T[a][b]>;
123120
export function select<
124121
T,
125122
a extends keyof T,
126123
b extends keyof T[a],
127124
c extends keyof T[a][b]
128-
>(key1: a, key2: b, key3: c): (source$: Store<a>) => Observable<T[a][b][c]>;
125+
>(
126+
key1: a,
127+
key2: b,
128+
key3: c
129+
): (source$: Observable<T>) => Observable<T[a][b][c]>;
129130
export function select<
130131
T,
131132
a extends keyof T,
@@ -137,7 +138,7 @@ export function select<
137138
key2: b,
138139
key3: c,
139140
key4: d
140-
): (source$: Store<a>) => Observable<T[a][b][c][d]>;
141+
): (source$: Observable<T>) => Observable<T[a][b][c][d]>;
141142
export function select<
142143
T,
143144
a extends keyof T,
@@ -151,7 +152,7 @@ export function select<
151152
key3: c,
152153
key4: d,
153154
key5: e
154-
): (source$: Store<a>) => Observable<T[a][b][c][d][e]>;
155+
): (source$: Observable<T>) => Observable<T[a][b][c][d][e]>;
155156
export function select<
156157
T,
157158
a extends keyof T,
@@ -167,20 +168,19 @@ export function select<
167168
key4: d,
168169
key5: e,
169170
key6: f
170-
): (source$: Store<a>) => Observable<T[a][b][c][d][e][f]>;
171+
): (source$: Observable<T>) => Observable<T[a][b][c][d][e][f]>;
171172
/**
172173
* This overload is used to support spread operator with
173174
* fixed length tuples type in typescript 2.7
174175
*/
175-
export function select<T, K>(
176-
pathOrMapFn: ((state: T) => any) | string,
176+
export function select<T, K = any>(
177177
...paths: string[]
178-
): (source$: Store<T>) => Observable<K>;
178+
): (source$: Observable<T>) => Observable<K>;
179179
export function select<T, K>(
180180
pathOrMapFn: ((state: T) => any) | string,
181181
...paths: string[]
182182
) {
183-
return function selectOperator(source$: Store<T>): Observable<K> {
183+
return function selectOperator(source$: Observable<T>): Observable<K> {
184184
let mapped$: Observable<any>;
185185

186186
if (typeof pathOrMapFn === 'string') {

0 commit comments

Comments
 (0)