• 카테고리

    질문 & 답변
  • 세부 분야

    프론트엔드

  • 해결 여부

    해결됨

비동기 action 타입을 뭘로 지정해야 할까요?

23.06.20 22:46 작성 23.06.20 22:55 수정 조회수 139

0

 

//비동기
const logIn = (data: any): any => {
  return (dispatch: Dispatch<AnyAction>, getState: any) => {
    dispatch(logInRequest(data));
    try {
      return setTimeout(() => {
       dispatch(logInSuccess({
            id: 1,
            name: "userName",
            admin: true,
          })
        );
      }, 2000);
    } catch (error) {
      return dispatch(logInFailure(error));
    }
  };
};

const logInRequest = (data: any): AnyAction => {
  return {
    type: "LOG_IN_REQUEST",
    data,
  };
};

const logInSuccess = (data: any): AnyAction => {
  return {
    type: "LOG_IN",
    data,
  };
};

const logInFailure = (error: unknown) => {
  return {
    type: "LOG_IN_FAILURE",
    error,
  };
};

//login을 dispatch 
store.dispatch(logIn({ id: 1, name: "userName", admin: true }));

 

강좌코드를 타입스크립트로 변환해보고 있는중에 궁금한게 있어서 질문드립니다.

login 비동기 함수가 return 하는게 함수이고

setTimeOut함수 때문에 함수반환타입도 Action 타입이 아니라서

최종적으로 리턴타입이 () => NodeJS.Timeout | AnyAction이 되는것 같습니다

store.dispatch(login())을 하면 타입에러가 나오는데

login 리턴타입을 any로 바꿔주는거 말고 다른 방법으로 해결 할 수 있는 방법이 있을까요?

 

 

 

 

답변 1

답변을 작성해보세요.

0

https://stackoverflow.com/a/64859884

이런 식으로 dispatch의 타입을 직접 변경해야 합니다. 리덕스툴킷에는 이 작업이 되어 있습니다.