인프런 커뮤니티 질문&답변

grs0412님의 프로필 이미지

작성한 질문수

Redux vs MobX (둘 다 배우자!)

2-4. redux-thunk

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

해결된 질문

23.06.20 22:46 작성

·

188

·

수정됨

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

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

2023. 06. 20. 23:17

https://stackoverflow.com/a/64859884

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

grs0412님의 프로필 이미지

작성한 질문수

질문하기