Redux/Saga中yield与*语法问题:如何解决类型注解报错?
解决Redux Saga生成器函数的TypeScript类型报错
问题代码
import { all } from 'redux-saga/effects' import cart from './cart/sagas' export default function* rootSaga() { return yield all([ cart, ]) }
报错信息:‘yield’表达式隐式生成‘any’类型,因为其所在生成器缺少返回类型注解。
解决方法
TypeScript无法自动推断Redux Saga生成器函数的类型,需显式添加类型注解。修改后的代码如下:
import { all, ForkEffect, Generator } from 'redux-saga/effects' import cart from './cart/sagas' export default function* rootSaga(): Generator<ForkEffect<never>, void, unknown> { yield all([ cart, ]) }
说明
- 导入
ForkEffect和Generator类型,明确生成器函数的类型约束 Generator<ForkEffect<never>, void, unknown>的三个泛型参数分别对应:ForkEffect<never>:yield表达式产生的值的类型(即all执行后返回的saga副作用类型)void:生成器函数的返回类型(无需返回值时用void)unknown:调用生成器next()方法时传入的值的类型(无特殊需求时用unknown即可)
另外,原代码中的return yield all(...)可简化为yield all(...),因为yield all会阻塞直到所有子saga执行完成,返回语句无实际作用。
内容的提问来源于stack exchange,提问作者Cristiano Pereira da Silva
相关产品推荐
相关产品推荐

