Skip to content

Commit a1691be

Browse files
committed
alternative approach for TS<3.5
1 parent 9023d83 commit a1691be

File tree

4 files changed

+10
-13
lines changed

4 files changed

+10
-13
lines changed

etc/redux-toolkit.api.md

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -202,13 +202,9 @@ export { ThunkAction }
202202
// @public
203203
export type ValidateSliceCaseReducers<S, ACR extends SliceCaseReducers<S>> = ACR & {
204204
[T in keyof ACR]: ACR[T] extends {
205-
prepare(...a: never[]): {
206-
payload: infer P;
207-
meta?: infer M;
208-
error?: infer E;
209-
};
205+
reducer(s: S, action?: infer A): any;
210206
} ? {
211-
reducer(s: S, action: PayloadAction<P, string, M, E>): any;
207+
prepare(...a: never[]): Omit<A, 'type'>;
212208
} : {};
213209
};
214210

src/createSlice.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import {
1212
ActionReducerMapBuilder,
1313
executeReducerBuilderCallback
1414
} from './mapBuilders'
15+
import { Omit } from './tsHelpers'
1516

1617
/**
1718
* An action creator atttached to a slice.
@@ -188,12 +189,10 @@ export type ValidateSliceCaseReducers<
188189
> = ACR &
189190
{
190191
[T in keyof ACR]: ACR[T] extends {
191-
prepare(
192-
...a: never[]
193-
): { payload: infer P; meta?: infer M; error?: infer E }
192+
reducer(s: S, action?: infer A): any
194193
}
195194
? {
196-
reducer(s: S, action: PayloadAction<P, string, M, E>): any
195+
prepare(...a: never[]): Omit<A, 'type'>
197196
}
198197
: {}
199198
}

src/tsHelpers.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,3 +87,5 @@ type UnionToIntersection<U> = (U extends any
8787
: never) extends ((k: infer I) => void)
8888
? I
8989
: never
90+
91+
export type Omit<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>>

type-tests/files/createSlice.typetest.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ function expectType<T>(t: T) {
7070
? payload.reduce((acc, val) => acc * val, state)
7171
: state * payload,
7272
addTwo: {
73-
reducer: (s, { payload }) => s + payload,
73+
reducer: (s, { payload }: PayloadAction<number>) => s + payload,
7474
prepare: (a: number, b: number) => ({
7575
payload: a + b
7676
})
@@ -212,8 +212,8 @@ function expectType<T>(t: T) {
212212
},
213213
// case: meta is typed differently in the reducer than returned from prepare
214214
testErroneousMeta: {
215-
// typings:expect-error
216215
reducer(_, action: PayloadAction<number, string, 'meta', 'error'>) {},
216+
// typings:expect-error
217217
prepare: (payload: number) => ({
218218
payload,
219219
meta: 1,
@@ -222,8 +222,8 @@ function expectType<T>(t: T) {
222222
},
223223
// case: error is typed differently in the reducer than returned from prepare
224224
testErroneousError: {
225-
// typings:expect-error
226225
reducer(_, action: PayloadAction<number, string, 'meta', 'error'>) {},
226+
// typings:expect-error
227227
prepare: (payload: number) => ({
228228
payload,
229229
meta: 'meta' as 'meta',

0 commit comments

Comments
 (0)