在yeild takeLatest中,类型'"MY_EVENTS_LOAD "的参数不可分配给类型'TakeableChannel<unknown>'的参数。

问题描述 投票:2回答:1

我在typecript上出了一个错误,我用Redux和Saga作为中间件,这是错误。

No overload matches this call. 最后一个重载出现了以下错误。 '"MY_EVENTS_LOAD"'类型的参数不可分配给'TakeableChannel'类型的参数。

我想在这里创建一个监视者。

export default function* watcher() {
  yield takeEvery(actions.MY_EVENTS_LOAD, getListEventsByUserSaga);
}

在我的saga文件中,有这样一个函数

export function* getListEventsByUserSaga(OwnerId: string) {
  try {
    const events = yield getEventsByOwnerId(OwnerId);
    yield put(actions.fetchMyEventsListUserSuccess(events));
  } catch (error) {
    yield put(actions.fetchMyEventsListUserFailure(error.message));
  }
}

当我做我的动作时,会发生这种情况。

export const fetchMyEventsListUserLoad = (OwnerId: string) => {
  return {
    type: MY_EVENTS_LOAD,
    OwnerId,
  };
};

如何才能以正确的方式实现这些?

javascript reactjs typescript redux-saga
1个回答
1
投票

你可以做什么(我做了什么,在我的情况下,至少)是什么指出在 这个 链接。目前,你似乎只输出了 OwnerId 字符串到生成器,这不应该像现在这样工作,因为那里的生成器基本上是把派发的参数、一个带有类型的对象和其余的参数发送给派发器。"正确 "的做法是有一个包含类型的类型定义,用这样的方式。

type Params = { OwnerId: string, type: string }
export function* getListEventsByUserSaga({ OwnerId }: Params) {
...
}

0
投票

在你的getListEventsByUserSaga生成器中,你声明这个动作是: {OwnerId:string} 没有类型。如果你尝试用类型来声明它,这将摆脱错误。你可以使用 返回类型.

export function* getListEventsByUserSaga({OwnerId} : ReturnType<typeof fetchMyEventsListUserLoad>) {
  try {
    // code
  } catch (error) {
    // code
  }
}

https:/github.comredux-sagaredux-sagaissues1883。

© www.soinside.com 2019 - 2024. All rights reserved.