Skip to content

Commit b3994bc

Browse files
author
jedmao
committed
Simplify applyMiddleware
1 parent 85024d4 commit b3994bc

File tree

1 file changed

+16
-37
lines changed

1 file changed

+16
-37
lines changed

src/applyMiddleware.ts

Lines changed: 16 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
import compose from './compose'
22
import { Middleware, MiddlewareAPI } from './types/middleware'
3-
import { AnyAction } from './types/actions'
4-
import { StoreEnhancer, StoreCreator, Dispatch } from './types/store'
5-
import { Reducer } from './types/reducers'
3+
import {
4+
Dispatch,
5+
StoreEnhancer,
6+
StoreEnhancerStoreCreator
7+
} from './types/store'
68

79
/**
810
* Creates a store enhancer that applies middleware to the dispatch method
@@ -23,40 +25,17 @@ import { Reducer } from './types/reducers'
2325
* @template Ext Dispatch signature added by a middleware.
2426
* @template S The type of the state supported by a middleware.
2527
*/
26-
export default function applyMiddleware(): StoreEnhancer
27-
export default function applyMiddleware<Ext1, S>(
28-
middleware1: Middleware<Ext1, S, any>
29-
): StoreEnhancer<{ dispatch: Ext1 }>
30-
export default function applyMiddleware<Ext1, Ext2, S>(
31-
middleware1: Middleware<Ext1, S, any>,
32-
middleware2: Middleware<Ext2, S, any>
33-
): StoreEnhancer<{ dispatch: Ext1 & Ext2 }>
34-
export default function applyMiddleware<Ext1, Ext2, Ext3, S>(
35-
middleware1: Middleware<Ext1, S, any>,
36-
middleware2: Middleware<Ext2, S, any>,
37-
middleware3: Middleware<Ext3, S, any>
38-
): StoreEnhancer<{ dispatch: Ext1 & Ext2 & Ext3 }>
39-
export default function applyMiddleware<Ext1, Ext2, Ext3, Ext4, S>(
40-
middleware1: Middleware<Ext1, S, any>,
41-
middleware2: Middleware<Ext2, S, any>,
42-
middleware3: Middleware<Ext3, S, any>,
43-
middleware4: Middleware<Ext4, S, any>
44-
): StoreEnhancer<{ dispatch: Ext1 & Ext2 & Ext3 & Ext4 }>
45-
export default function applyMiddleware<Ext1, Ext2, Ext3, Ext4, Ext5, S>(
46-
middleware1: Middleware<Ext1, S, any>,
47-
middleware2: Middleware<Ext2, S, any>,
48-
middleware3: Middleware<Ext3, S, any>,
49-
middleware4: Middleware<Ext4, S, any>,
50-
middleware5: Middleware<Ext5, S, any>
51-
): StoreEnhancer<{ dispatch: Ext1 & Ext2 & Ext3 & Ext4 & Ext5 }>
52-
export default function applyMiddleware<Ext, S = any>(
53-
...middlewares: Middleware<any, S, any>[]
54-
): StoreEnhancer<{ dispatch: Ext }>
55-
export default function applyMiddleware(
56-
...middlewares: Middleware[]
57-
): StoreEnhancer<any> {
58-
return (createStore: StoreCreator) => <S, A extends AnyAction>(
59-
reducer: Reducer<S, A>,
28+
export default function applyMiddleware<
29+
S = any,
30+
M extends Middleware = Middleware
31+
>(
32+
...middlewares: M[]
33+
): StoreEnhancer<
34+
M extends Middleware<any, any, infer D> ? { dispatch: D } : never,
35+
S
36+
> {
37+
return (createStore: StoreEnhancerStoreCreator<any>) => (
38+
reducer,
6039
...args: any[]
6140
) => {
6241
const store = createStore(reducer, ...args)

0 commit comments

Comments
 (0)