我在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,
};
};
如何才能以正确的方式实现这些?
你可以做什么(我做了什么,在我的情况下,至少)是什么指出在 这个 链接。目前,你似乎只输出了 OwnerId
字符串到生成器,这不应该像现在这样工作,因为那里的生成器基本上是把派发的参数、一个带有类型的对象和其余的参数发送给派发器。"正确 "的做法是有一个包含类型的类型定义,用这样的方式。
type Params = { OwnerId: string, type: string }
export function* getListEventsByUserSaga({ OwnerId }: Params) {
...
}
在你的getListEventsByUserSaga生成器中,你声明这个动作是: {OwnerId:string}
没有类型。如果你尝试用类型来声明它,这将摆脱错误。你可以使用 返回类型.
export function* getListEventsByUserSaga({OwnerId} : ReturnType<typeof fetchMyEventsListUserLoad>) {
try {
// code
} catch (error) {
// code
}
}