I am new to Typescript and wanted to practice a library called redux-actions. I followed this tutorial:
https://youtube.com/watch?v=8DH7Ekp2PWI&feature=shares
and I tried to use the redux-actions tutorial
https://redux-actions.js.org/introduction/tutorial
but it does not work in jsfiddle or codepen, like they suggest, so I thought a better approach would be to modify the Youtube tutorial and use the redux-actions library in the codebase from the YouTube video.
The codebase for the Youtube tutorial is on github.
https://github.com/Jon-Peppinck/react-redux-ts
However, I am having trouble with the actions and reducer components. Here is what I have tried
Counter.ts
export interface Counter {
count: number;
}
CounterActions.ts
import { createActions } from "redux-actions";
export const { increment, decrement } = createActions({
INCREMENT: (amount = 1) => ({ amount }),
DECREMENT: (amount = 1) => ({ amount: -amount }),
});
interface IncrementAction {
type: typeof increment;
}
interface DecrementAction {
type: typeof decrement;
}
export type CounterActionTypes = IncrementAction | DecrementAction;
CounterReducer.ts
import { handleActions } from "redux-actions";
import { CounterActionTypes, decrement, increment } from "./CounterAction";
import { Counter } from "./models/Counter";
const defaultState: Counter = {
count: 0,
};
export const counterReducer = handleActions(
{
[increment]: (state: Counter, { payload: { amount } }: any): Counter => {
return { ...state, count: state.count + amount };
},
[decrement]: (state: Counter, { payload: { amount } }: any): Counter => {
return { ...state, count: state.count + amount };
},
},
defaultState
);
But the increment and decrement actions are showing an error:
A computed property name must be of type 'string', 'number', 'symbol', or 'any'.ts(2464)
I am also not sure of the way I have typed the payload using any, is there a better way to type it. How can I fix my code and prevent the errors? Also, are there any resources or tutorials on using redux-actions that are not paid content. I searched, but I am unable to find anything.
Seems the issue is in the
[increment], I don't get why it's that way in the documentation, but hey, it's 4 years old.But what worked for me is this:
CounterActions.tsCounterReducer.ts