Open fvilers opened 4 years ago
Something like this should work:
const composeEnhancers = composeWithDevTools({
stateSanitizer: <S extends Partial<AppState>>(state: S): S => {
const { user, ...rest } = state
return {
...rest
} as S
}
})
That can likely be closed.
Is there a similar example for actionSanitizer
? This is the furthest I've gotten:
actionSanitizer: <S extends Action<string>>(action: S): S => {
if (action.type === 'LOAD_DATA') {
action.data; // TypeScript compiler throws an error on this line
}
return action;
}
I've tried using <S extends Action<string> & {data: any}>
but then I get an error because {data: any}
doesn't fit the type constraint on the function.
Update: I've got it working with the following:
actionSanitizer: <S extends Action<string>>(action: S & {payload: any}): S => {
if (action.type === 'LOAD_DATA') {
action.payload; // This works
}
return action;
}
In my case I'm using flux-standard-action so actions have a payload
attached.
If your action(s) have a payload
prop, you can also use the AnyAction
type from redux:
const actionSanitizer = <A extends AnyAction>(action: A) => {
....
}
For me the magic incantation is
actionSanitizer: <A extends Action>(action: A & { payload: any} | A): A => {
if (action.type === 'MY_ACTION_TYPE' && 'payload' in action) {
// return modified action
}
return action
}
I guess the reason is that we don't know if any given passed action will have a payload
property (or whatever custom property your playing with), so we have to tell it that the action can either be action with a payload or any other action.
Hi !
I'd like to use these
EnhancerOptions
with TypeScript and my typed state but can't find a way to set them correctly. I don't want to useany
and to lose types.Here's a small reproductible example (type
StateSanitizer
comes from redux-devtools) :Which result in a compiler error :
I tried this too (same error) :
I'm probably missing something but can't find what.
Here's my application store creation file :
Which fails with the same issue at compile-time.
Thanks for you help and suggestions ;-)