UNPKG

7.55 kBTypeScriptView Raw
1export as namespace ReduxActions;
2
3// FSA-compliant action.
4// See: https://github.com/acdlite/flux-standard-action
5export interface BaseAction {
6 type: string;
7}
8
9export interface Action<Payload> extends BaseAction {
10 payload: Payload;
11 error?: boolean | undefined;
12}
13
14export interface ActionMeta<Payload, Meta> extends Action<Payload> {
15 meta: Meta;
16}
17
18// https://github.com/redux-utilities/redux-actions/blob/v2.3.0/src/combineActions.js#L27
19export interface CombinedActionType {
20 _dummy: undefined;
21}
22
23export type ReducerMapValue<State, Payload> =
24 | Reducer<State, Payload>
25 | ReducerNextThrow<State, Payload>
26 | ReducerMap<State, Payload>;
27
28export interface ReducerMap<State, Payload> {
29 [actionType: string]: ReducerMapValue<State, Payload>;
30}
31
32export interface ReducerMapMeta<State, Payload, Meta> {
33 [actionType: string]:
34 | ReducerMeta<State, Payload, Meta>
35 | ReducerNextThrowMeta<State, Payload, Meta>
36 | ReducerMapMeta<State, Payload, Meta>;
37}
38
39export interface ReducerNextThrow<State, Payload> {
40 next?(state: State, action: Action<Payload>): State;
41 throw?(state: State, action: Action<Payload>): State;
42}
43
44export interface ReducerNextThrowMeta<State, Payload, Meta> {
45 next?(state: State, action: ActionMeta<Payload, Meta>): State;
46 throw?(state: State, action: ActionMeta<Payload, Meta>): State;
47}
48
49export type BaseActionFunctions<TAction> =
50 | ActionFunction0<TAction>
51 | ActionFunction1<any, TAction>
52 | ActionFunction2<any, any, TAction>
53 | ActionFunction3<any, any, any, TAction>
54 | ActionFunction4<any, any, any, any, TAction>
55 | ActionFunctionAny<TAction>;
56
57export type ActionFunctions<Payload> = BaseActionFunctions<Action<Payload>>;
58
59export type ActionWithMetaFunctions<Payload, Meta> = BaseActionFunctions<ActionMeta<Payload, Meta>>;
60
61export type Reducer<State, Payload> = (state: State, action: Action<Payload>) => State;
62
63export type ReducerMeta<State, Payload, Meta> = (state: State, action: ActionMeta<Payload, Meta>) => State;
64
65export type ReduxCompatibleReducer<State, Payload> = (state: State | undefined, action: Action<Payload>) => State;
66
67export type ReduxCompatibleReducerMeta<State, Payload, Meta> = (
68 state: State | undefined,
69 action: ActionMeta<Payload, Meta>,
70) => State;
71
72/** argument inferring borrowed from lodash definitions */
73export type ActionFunction0<R> = () => R;
74export type ActionFunction1<T1, R> = (t1: T1) => R;
75export type ActionFunction2<T1, T2, R> = (t1: T1, t2: T2) => R;
76export type ActionFunction3<T1, T2, T3, R> = (t1: T1, t2: T2, t3: T3) => R;
77export type ActionFunction4<T1, T2, T3, T4, R> = (t1: T1, t2: T2, t3: T3, t4: T4) => R;
78export type ActionFunctionAny<R> = (...args: any[]) => R;
79
80// https://github.com/redux-utilities/redux-actions/blob/v2.3.0/src/createAction.js#L6
81export function createAction(
82 actionType: string,
83): ActionFunctionAny<Action<any>>;
84
85export function createAction<Payload>(
86 actionType: string,
87 payloadCreator: ActionFunction0<Payload>,
88): ActionFunction0<Action<Payload>>;
89
90export function createAction<Payload, Arg1>(
91 actionType: string,
92 payloadCreator: ActionFunction1<Arg1, Payload>,
93): ActionFunction1<Arg1, Action<Payload>>;
94
95export function createAction<Payload, Arg1, Arg2>(
96 actionType: string,
97 payloadCreator: ActionFunction2<Arg1, Arg2, Payload>,
98): ActionFunction2<Arg1, Arg2, Action<Payload>>;
99
100export function createAction<Payload, Arg1, Arg2, Arg3>(
101 actionType: string,
102 payloadCreator: ActionFunction3<Arg1, Arg2, Arg3, Payload>,
103): ActionFunction3<Arg1, Arg2, Arg3, Action<Payload>>;
104
105export function createAction<Payload, Arg1, Arg2, Arg3, Arg4>(
106 actionType: string,
107 payloadCreator: ActionFunction4<Arg1, Arg2, Arg3, Arg4, Payload>,
108): ActionFunction4<Arg1, Arg2, Arg3, Arg4, Action<Payload>>;
109
110export function createAction<Payload>(
111 actionType: string,
112): ActionFunction1<Payload, Action<Payload>>;
113
114export function createAction<Meta>(
115 actionType: string,
116 payloadCreator: null | undefined,
117 metaCreator: ActionFunctionAny<Meta>,
118): ActionFunctionAny<ActionMeta<any, Meta>>;
119
120export function createAction<Payload, Meta>(
121 actionType: string,
122 payloadCreator: ActionFunctionAny<Payload>,
123 metaCreator: ActionFunctionAny<Meta>,
124): ActionFunctionAny<ActionMeta<Payload, Meta>>;
125
126export function createAction<Payload, Meta, Arg1>(
127 actionType: string,
128 payloadCreator: ActionFunction1<Arg1, Payload>,
129 metaCreator: ActionFunction1<Arg1, Meta>,
130): ActionFunction1<Arg1, ActionMeta<Payload, Meta>>;
131
132export function createAction<Payload, Meta, Arg1, Arg2>(
133 actionType: string,
134 payloadCreator: ActionFunction2<Arg1, Arg2, Payload>,
135 metaCreator: ActionFunction2<Arg1, Arg2, Meta>,
136): ActionFunction2<Arg1, Arg2, ActionMeta<Payload, Meta>>;
137
138export function createAction<Payload, Meta, Arg1, Arg2, Arg3>(
139 actionType: string,
140 payloadCreator: ActionFunction3<Arg1, Arg2, Arg3, Payload>,
141 metaCreator: ActionFunction3<Arg1, Arg2, Arg3, Meta>,
142): ActionFunction3<Arg1, Arg2, Arg3, ActionMeta<Payload, Meta>>;
143
144export function createAction<Payload, Meta, Arg1, Arg2, Arg3, Arg4>(
145 actionType: string,
146 payloadCreator: ActionFunction4<Arg1, Arg2, Arg3, Arg4, Payload>,
147 metaCreator: ActionFunction4<Arg1, Arg2, Arg3, Arg4, Meta>,
148): ActionFunction4<Arg1, Arg2, Arg3, Arg4, ActionMeta<Payload, Meta>>;
149
150export function handleAction<State, Payload>(
151 actionType: string | ActionFunctions<Payload> | CombinedActionType,
152 reducer: Reducer<State, Payload> | ReducerNextThrow<State, Payload>,
153 initialState: State,
154): ReduxCompatibleReducer<State, Payload>;
155
156export function handleAction<State, Payload, Meta>(
157 actionType: string | ActionWithMetaFunctions<Payload, Meta> | CombinedActionType,
158 reducer: ReducerMeta<State, Payload, Meta> | ReducerNextThrowMeta<State, Payload, Meta>,
159 initialState: State,
160): ReduxCompatibleReducerMeta<State, Payload, Meta>;
161
162export interface Options {
163 prefix?: string | undefined;
164 namespace?: string | undefined;
165}
166
167export function handleActions<StateAndPayload>(
168 reducerMap: ReducerMap<StateAndPayload, StateAndPayload>,
169 initialState: StateAndPayload,
170 options?: Options,
171): ReduxCompatibleReducer<StateAndPayload, StateAndPayload>;
172
173export function handleActions<State, Payload>(
174 reducerMap: ReducerMap<State, Payload>,
175 initialState: State,
176 options?: Options,
177): ReduxCompatibleReducer<State, Payload>;
178
179export function handleActions<State, Payload, Meta>(
180 reducerMap: ReducerMapMeta<State, Payload, Meta>,
181 initialState: State,
182 options?: Options,
183): ReduxCompatibleReducerMeta<State, Payload, Meta>;
184
185// https://github.com/redux-utilities/redux-actions/blob/v2.3.0/src/combineActions.js#L21
186export function combineActions(...actionTypes: Array<ActionFunctions<any> | string | symbol>): CombinedActionType;
187
188export interface ActionMap<Payload, Meta> {
189 [actionType: string]:
190 | ActionMap<Payload, Meta>
191 | ActionFunctionAny<Payload>
192 | [ActionFunctionAny<Payload>, ActionFunctionAny<Meta>]
193 | undefined;
194}
195
196export function createActions<Payload>(
197 actionMapOrIdentityAction: ActionMap<Payload, any> | string,
198 ...identityActions: Array<string | Options>
199): {
200 [actionName: string]: ActionFunctionAny<Action<Payload>>;
201};
202
203export function createActions(
204 actionMapOrIdentityAction: ActionMap<any, any> | string,
205 ...identityActions: Array<string | Options>
206): {
207 [actionName: string]: ActionFunctionAny<Action<any>>;
208};