如何在typescript中为包含yield*委托的redux saga生成器函数编写类型
我正在学习发电机和redux传奇。 我引用了一个使用收益率*的现有示例。 第一种方法是使用“yieldPromiseResponse”的yieldPromiseResponse。 第二种方法-watchPromise,它使用带有 错误:类型“ForkEffect”必须具有返回迭代器的“Symbol.iterator”方法 有人能告诉我这个例子应该用哪种类型吗如何在typescript中为包含yield*委托的redux saga生成器函数编写类型,typescript,redux-saga,Typescript,Redux Saga,我正在学习发电机和redux传奇。 我引用了一个使用收益率*的现有示例。 第一种方法是使用“yieldPromiseResponse”的yieldPromiseResponse。 第二种方法-watchPromise,它使用带有 错误:类型“ForkEffect”必须具有返回迭代器的“Symbol.iterator”方法 有人能告诉我这个例子应该用哪种类型吗 const at:TAt={ 成功:“成功”, }; 界面道具{ 用户名:字符串; } 接口GProps{ 有效载荷:道具; } 输入Tp
const at:TAt={
成功:“成功”,
};
界面道具{
用户名:字符串;
}
接口GProps{
有效载荷:道具;
}
输入Tprom=(有效载荷:道具)=>Promise;
const prom:Tprom=username=>
新承诺((解决、拒绝)=>{
解析(`resolve prom uesrname=${username}`);
});
函数*yieldPromiseResponse({payload}:GProps){
/*eslint禁用无无用捕获*/
试一试{
const user=产量呼叫(prom,有效载荷);
log('user=',user);
产生put({type:at.SUCCESS,user});
}捕获(错误){
投掷误差;
}
}
函数*watchPromise(){
产量*takeLatest(应要求,产量承诺人响应);
}
出口违约承诺;
这里有两个问题。第一个是我设法修复的
问题1
- 最新的(模式、传奇,…参数)
- 最新(频道,传奇,…args)
从'redux saga/effects'导入{put,call,takeLatest};
从'redux'导入{Action};
const ActionTypeRequest='REQUEST';
界面道具{
用户名:字符串;
}
接口ActionResult扩展了操作{
类型:字符串;
有效载荷?:T;
}
输入Tprom=(有效载荷:道具)=>Promise;
const prom:Tprom=payload=>
新承诺((解决、拒绝)=>{
解析(`resolve prom uesrname=${payload.username}`);
});
函数*YieldPromiserResponse(操作:操作结果){
/*eslint禁用无无用捕获*/
const{payload}=动作;
试一试{
const user=yield call(prom,有效载荷作为道具);
产生put({type:ActionTypeRequest,user});
}捕获(错误){
投掷误差;
}
}
函数*watchPromise(){
最新产量(ActionTypeRequest、YieldPromiserResponse);
}
出口违约承诺;
问题2
仍然不适用于
yield*takeLatest(ActionTypeRequest,yieldPromiseResponse);
也许我需要理解收益率委托——收益率*
在阅读此文时—
当我将代码更改为此时,它不会抱怨。
所以也许有人能解释我最新的方法中收益率的问题
function* secondaryGenerator() {
yield delay(111);
return true;
}
function* watchPromise() {
yield takeLatest(ActionTypeRequest, yieldPromiseResponse);
const secondary = yield* secondaryGenerator();
console.log('second = ', secondary);
}
我已经有一段时间没有做这个
yield*
了,所以我看到了错误,但我不确定解决方案。若你们可以链接到你们所基于的例子,那个将很有帮助。基本上,yield*
后面需要一个迭代器takeLatest
创建一个不是迭代器的ForkEffect
。仅供参考prom
函数中的变量username
是一个具有属性username
的对象,而不仅仅是用户名。你可能想解构=({username})=>
@lindapaste谢谢你的回复。不是这样,但我找到了答案。将发布
function* secondaryGenerator() {
yield delay(111);
return true;
}
function* watchPromise() {
yield takeLatest(ActionTypeRequest, yieldPromiseResponse);
const secondary = yield* secondaryGenerator();
console.log('second = ', secondary);
}