typescript - 如何在 TypeScript 中遍历递归生成器?
问题描述
所以我有这个生成器,它只是从给定数组中获取子集。
export class GenerateThings {
static *generateSubsets(elements: any[], offset: number = 0) {
while (offset < elements.length) {
const first = elements[offset];
for (const subset of this.generateSubsets(elements, offset + 1)) {
subset.push(first);
yield subset;
}
}
yield [];
}
}
这适用于普通的javascript(当然没有类型)但是当我像这样在TypeScript上构建它时,它说
'generateSubsets' 隐式具有返回类型'any',因为它没有返回类型注释,并且在其返回表达式之一中直接或间接引用。
如果我们在 TypeScript 中使用这种递归方法,有没有办法遍历集合的结果子集?谢谢。
解决方案
正如上面评论中提到的@DemiPixel,您可以使用该Generator
类型作为函数的显式返回类型,例如Generator<any[], void, void>
这意味着生成器产生一个数组any
,不返回任何内容,并且在调用时不希望传递任何next()
内容。
但是,在这种情况下,更好的做法是将事情提升到一个新的水平并使用泛型,以避免使用危险的any
:
export class GenerateThings {
static *generateSubsets<T>(elements: T[], offset: number = 0): Generator<T[], void, void> {
// ...
}
}
顺便说一句,我认为你的代码不能正常工作,我怀疑你说const first = elements[offset];
你的意思是let first = elements[offset++];
推荐阅读
- performance - n4bg 在 AIX 中消耗高 CPU
- java - oracle数据库中删除的行通过JdbcTemplate检索
- ios - 在 iOS (Swift) 上静音 JWPlayer
- java - 如何允许我的程序根据用户输入的类型执行某些操作?
- json - ajax 结果数据为空
- netlogo - 使用 nw:generate-preferential-attachment 进行可重现的模拟运行?
- java - BroadCastReceiver 不接收数据?
- javascript - Loadash orderby 降序在 JavaScript 中不起作用(React Native)
- c++ - 如何强制在cmake中包含标头?
- javascript - '结果未定义' 使用 js 发布到控制器