Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在typescript中使用生成器函数_Javascript_Typescript_Ecmascript 6_Generator - Fatal编程技术网

Javascript 如何在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

我正在尝试在typescript中使用生成器函数。但是编译器抛出错误


错误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谢谢分享。链接到文档会很有帮助。