TypeScript中如何正确标注调用其他生成器的生成器函数类型
可以使用ES6内置的yield*生成器委托语法实现,无需手动循环遍历,同时保留生成器函数的*标识:
class MyWrapper { *generator(): Generator<Foo, void> { yield* utils.myGenerator(); } }
yield* 可以直接把外层生成器的迭代逻辑委托给内层的可迭代对象(这里就是utils.myGenerator()返回的生成器实例),既没有冗余的包装代码,类型也能完美匹配,不会触发类型报错。
你之前尝试直接return内层生成器实例报错的原因是:生成器函数中return的返回值对应Generator<T, TReturn, TNext>泛型的第二个参数TReturn,你的定义中该参数为void,自然不允许返回Generator<Foo, void>类型的值。
内容的提问来源于stack exchange,提问作者JHH
相关产品推荐
相关产品推荐

