Javascript 如何在typescript中使用生成器函数
我正在尝试在typescript中使用生成器函数。但是编译器抛出错误Javascript 如何在typescript中使用生成器函数,javascript,typescript,ecmascript-6,generator,Javascript,Typescript,Ecmascript 6,Generator,我正在尝试在typescript中使用生成器函数。但是编译器抛出错误 错误TS2339:类型上不存在属性“next” 下面是我的代码的一个最接近的示例 export default class GeneratorClass { constructor() { this.generator(10); this.generator.next(); } *generator(count:number): Iterable<number
错误TS2339:类型上不存在属性“next”
下面是我的代码的一个最接近的示例
export default class GeneratorClass {
constructor() {
this.generator(10);
this.generator.next();
}
*generator(count:number): Iterable<number | undefined> {
while(true)
yield count++;
}
}
导出默认类生成器类{
构造函数(){
本发明涉及发电机(10);
this.generator.next();
}
*生成器(计数:编号):Iterable{
while(true)
产量计算++;
}
}
函数返回的生成器上存在
next
方法,而不是生成器函数本身
export default class GeneratorClass {
constructor() {
const iterator = this.generator(10);
iterator.next();
}
*generator(count:number): IterableIterator<number> {
while(true)
yield count++;
}
}
导出默认类生成器类{
构造函数(){
常量迭代器=这个.generator(10);
iterator.next();
}
*生成器(计数:编号):IterableIterator{
while(true)
产量计算++;
}
}
我看到这个错误是因为我的tsconfig.json的目标是es5
我只是从以下内容中更改(摘录):
“目标”:“es5”,
“lib”:[
“es5”,
“es2015.承诺”
]
致:
“目标”:“es6”,
“lib”:[
“es6”
]
错误消失了
注意:对于VS代码,我需要为IntelliSense重新加载窗口以识别更改。要解决此问题,了解生成器函数(简称生成器)及其返回值之间的差异非常重要 生成器函数(用星号标记)是返回生成器对象的函数。生成器对象满足迭代器和iterable的要求 迭代器有一个
next
方法(这就是您在问题中寻找的方法)。和iterables有一个名为Symbol.iterator
(指定默认迭代器)的属性,该属性使它们在for循环中可用
由于生成器函数返回一个生成器对象,而生成器对象是一个iterable迭代器,因此必须声明一个返回类型IterableTerator
。在您的情况下,它将是IterableIterator
因为这里的术语令人困惑地相似,我记录了一个解释差异的例子。使用生成器函数时,请确保在
tsconfig.json
中将目标设置为es6
。您在操场上尝试过这个吗,它具有相同的结果错误TS2339:上不存在属性“next”type@anandaravindan:将类型从Iterable
更改为Iterator
@FelixKling谢谢。刚才查看了文档,返回类型是IterableIterator。@anandaravindan我很好奇,Iterator
和IterableIterator
之间有什么区别?@anandaravindan谢谢分享。链接到文档会很有帮助。