redux-saga yield 타입 에러

Darcy Daeseok YU ·2022년 1월 28일
0

리덕스 사가 구현 중 마주친 yield call 타입 에러가 나왔다.

'yield' expression implicitly results in an 'any' type because its containing generator lacks a return-type annotation.

call()에 사용할 api 메소드 타입도 모두 설정한 상태인데 ....왜?

  • API fetch method
export async function getMoviesAPI() {
  const { results }: { results: IMovie[] } = await (await fetch(URL)).json();
  console.log("api", results);
  return results;
}
  • sagas.ts
function* getMoviesSaga(action: any) {
  try {
  //에러는 여기서 난다.
    const data = yield call<typeof getMoviesAPI>(getMoviesAPI);
    yield put(getMoviesSuccess(data));
  } catch (error) {
    yield put(getMoviesError(error));
  }
}

function* moviesSaga() {
  yield takeEvery(GET_MOVIES, getMoviesSaga);
}

검색을 해보았다.

링크텍스트
stackOverflow 답변을 간단히 요약하자면

yield 왼쪽에 변수값의 타입은 항상 any
yield 는 모든값을 대응해야 하므로 타입을 반환하지 않음.
yield 로 산출되는 값의 타입은 사용자가 정의해야함.

고로 다음과 같이 타입을 직접 입력해준다.
call 함수에 제네릭 설정도 삭제한다. 무용지물

const data : IMovie[] = yield call(getMoviesAPI);

getMoviesAPI 리턴값이 변경될 경우 같이 수정되어야 하므로 ... 귀찮으니까 ReturnType로 설정해둔다.

const data : ReturnType<typeof getMovieAPI> = yield call(getMoviesAPI);

2022.02.03 data 타입이 Promise< IMovie[] > 로 설정된다.
==> 흠... Promise<>형태의 리턴타입을 실제 타입으로 받을 방법을 찾아봐야 겟다.

profile
React, React-Native https://darcyu83.netlify.app/

0개의 댓글