diff --git a/src/createSlice.ts b/src/createSlice.ts index 53b885a6ed..baac7a0f08 100644 --- a/src/createSlice.ts +++ b/src/createSlice.ts @@ -6,11 +6,12 @@ import { createSliceSelector, createSelectorName } from './sliceSelector' /** * An action creator atttached to a slice. */ -export type SliceActionCreator
= (payload: P) => PayloadAction
+export type SliceActionCreator
= P extends void
+ ? () => Action
export interface Slice<
S = any,
- A extends Action = AnyAction,
AP extends { [key: string]: any } = { [key: string]: any }
> {
/**
@@ -21,13 +22,15 @@ export interface Slice<
/**
* The slice's reducer.
*/
- reducer: Reducer
+ reducer: Reducer
/**
* Action creators for the types of actions that are handled by the slice
* reducer.
*/
- actions: { [type in keyof AP]: SliceActionCreator = CaseReducersMapObject
->(
- options: CreateSliceOptions
-): Slice> {
+>(options: CreateSliceOptions): Slice> {
const { slice = '', initialState } = options
const reducers = options.reducers || {}
const extraReducers = options.extraReducers || {}
diff --git a/type-tests/files/createSlice.typetest.ts b/type-tests/files/createSlice.typetest.ts
index a048746361..4698e49271 100644
--- a/type-tests/files/createSlice.typetest.ts
+++ b/type-tests/files/createSlice.typetest.ts
@@ -1,4 +1,5 @@
import {
+ Action,
AnyAction,
createSlice,
PayloadAction,
@@ -64,6 +65,10 @@ import {
}
})
+ const increment: () => Action<'increment'> = counter.actions.increment
+ const multiply: (payload: number) => PayloadAction