Skip to content

Commit 37b3723

Browse files
authored
Merge pull request #3475 from reduxjs/action-creator-without-payload-fix
2 parents a005d57 + b029318 commit 37b3723

File tree

2 files changed

+34
-3
lines changed

2 files changed

+34
-3
lines changed

packages/toolkit/src/createSlice.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -353,6 +353,9 @@ interface AsyncThunkCreator<
353353
}
354354

355355
export interface ReducerCreators<State> {
356+
reducer(
357+
caseReducer: CaseReducer<State, PayloadAction>
358+
): CaseReducerDefinition<State, PayloadAction>
356359
reducer<Payload>(
357360
caseReducer: CaseReducer<State, PayloadAction<Payload>>
358361
): CaseReducerDefinition<State, PayloadAction<Payload>>
@@ -746,7 +749,7 @@ function buildReducerCreators<State>(): ReducerCreators<State> {
746749
}
747750
asyncThunk.withTypes = () => asyncThunk
748751
return {
749-
reducer(caseReducer) {
752+
reducer(caseReducer: CaseReducer<State, any>) {
750753
return Object.assign(
751754
{
752755
// hack so the wrapping function has the same name as the original

packages/toolkit/src/tests/createSlice.typetest.ts

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -599,9 +599,20 @@ const value = actionCreators.anyKey
599599
}>()
600600

601601
return {
602-
normalReducer: create.reducer<string>((state, action) => {
602+
normalReducer: create.reducer(
603+
(state, action: PayloadAction<string>) => {
604+
expectType<TestState>(state)
605+
expectType<string>(action.payload)
606+
}
607+
),
608+
optionalReducer: create.reducer(
609+
(state, action: PayloadAction<string | undefined>) => {
610+
expectType<TestState>(state)
611+
expectType<string | undefined>(action.payload)
612+
}
613+
),
614+
noActionReducer: create.reducer((state) => {
603615
expectType<TestState>(state)
604-
expectType<string>(action.payload)
605616
}),
606617
preparedReducer: create.preparedReducer(
607618
(payload: string) => ({
@@ -707,6 +718,23 @@ const value = actionCreators.anyKey
707718
type StoreDispatch = typeof store.dispatch
708719

709720
expectType<PayloadActionCreator<string>>(slice.actions.normalReducer)
721+
slice.actions.normalReducer('')
722+
// @ts-expect-error
723+
slice.actions.normalReducer()
724+
// @ts-expect-error
725+
slice.actions.normalReducer(0)
726+
expectType<ActionCreatorWithOptionalPayload<string | undefined>>(
727+
slice.actions.optionalReducer
728+
)
729+
slice.actions.optionalReducer()
730+
slice.actions.optionalReducer('')
731+
// @ts-expect-error
732+
slice.actions.optionalReducer(0)
733+
734+
expectType<ActionCreatorWithoutPayload>(slice.actions.noActionReducer)
735+
slice.actions.noActionReducer()
736+
// @ts-expect-error
737+
slice.actions.noActionReducer('')
710738
expectType<
711739
ActionCreatorWithPreparedPayload<
712740
[string],

0 commit comments

Comments
 (0)