Typing Redux Action Creators

Provide examples of how to define type-safe action creators in TypeScript for use with Redux, ensuring that payloads and types are correctly used.
interface Action<Type extends string, Payload> {
  type: Type;
  payload: Payload;

function createAction<Type extends string, Payload>(type: Type, payload: Payload): Action<Type, Payload> {
  return { type, payload };
This TypeScript code defines a generic interface for an action with type and payload, and a function to create such an action. It ensures that the action type and payload are correctly typed.
type MyActionType = 'INCREMENT' | 'DECREMENT' | 'SET';

interface IncrementAction extends Action<'INCREMENT', undefined> {}
interface DecrementAction extends Action<'DECREMENT', undefined> {}
interface SetAction extends Action<'SET', number> {}
Defines specific action types and corresponding interfaces for the typing system with explicit action type and payload structure for increment, decrement, and set actions.
function increment(): IncrementAction {
  return createAction('INCREMENT', undefined);

function decrement(): DecrementAction {
  return createAction('DECREMENT', undefined);

function set(value: number): SetAction {
  return createAction('SET', value);
Provides three action creators for increment, decrement, and set actions that use the createAction function to ensure type safety.