Как типизировать thunk actions в typescript?

Какой правильный способ типизации thunk actions в typescript?

export const addTodoAction = ({text, completed}: NewTodo) => { 
  return (dispatch: Dispatch<TodoAction>) => {...} 
}

или

export const addTodoAction = ({text, completed}: NewTodo): ThunkAction<void, RootState, null, TodoAction> => { 
  return dispatch => {...} 
}

Ответы (1 шт):

Автор решения: KOTI4
const addTodoAction: ActionCreator<
ThunkAction<Promise<Action>, ITodo, void, Action>
> = () => async (dispatch: ThunkDispatch<ITodo, null, AnyAction>): 
Promise<Action> => {
  try {
    const todos = await axios();
    return dispatch<ITodoActionInit>({
      type: TodoActionTypes.TODO_INIT,
      payload: { todos },
    });
  } catch (error) {
    return dispatch<ITodoActionError>({
      type: TodoActionTypes.TODO_ERROR,
      payload: { error },
    });
  }
};
→ Ссылка