Coo*_*ife 8 javascript typescript reactjs redux-saga
我在打字稿上有错误,我使用 Redux 和 Saga 作为中间件,这是错误:
没有重载匹配这个调用。最后一次重载给出了以下错误。“MY_EVENTS_LOAD”类型的参数不可分配给“TakeableChannel”类型的参数。
我想在这里创建一个观察者:
export default function* watcher() {
yield takeEvery(actions.MY_EVENTS_LOAD, getListEventsByUserSaga);
}
Run Code Online (Sandbox Code Playgroud)
在我的 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));
}
}
Run Code Online (Sandbox Code Playgroud)
当我采取行动时会发生这种情况:
export const fetchMyEventsListUserLoad = (OwnerId: string) => {
return {
type: MY_EVENTS_LOAD,
OwnerId,
};
};
Run Code Online (Sandbox Code Playgroud)
如何以正确的方式实施这些?
小智 5
在 getListEventsByUserSaga 生成器中,您将操作声明为{OwnerId:string}没有类型。如果您尝试用类型声明它,这将消除错误。您可以使用ReturnType。
export function* getListEventsByUserSaga({OwnerId} : ReturnType<typeof fetchMyEventsListUserLoad>) {
try {
// code
} catch (error) {
// code
}
}
Run Code Online (Sandbox Code Playgroud)
https://github.com/redux-saga/redux-saga/issues/1883
您可以做什么(至少在我的情况下我做了什么)是此链接中指出的。目前,您似乎只将OwnerId字符串输出到生成器,这不应该像现在这样工作,因为那里的生成器基本上接受调度的参数、具有类型的对象以及发送到调度程序的其余参数。“正确”的做法是拥有一个包含该类型的类型定义,例如:
type Params = { OwnerId: string, type: string }
export function* getListEventsByUserSaga({ OwnerId }: Params) {
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3988 次 |
| 最近记录: |