打字稿生成器属性/获取者

Yon*_*ree 6 getter properties generator typescript

在typescript中创建一个生成器方法很简单:

class Foo {
    *values() { yield 10 }
}
Run Code Online (Sandbox Code Playgroud)

但我想创建一个生成器属性,如下所示:

class Foo {
    get *values() { yield 10 }
}
Run Code Online (Sandbox Code Playgroud)

但这似乎无效.我似乎无法找到任何对这个问题或变通方法的引用(除了明显使用Object.defineProperty明显,这会很糟糕,因为它将是无类型的).我错过了什么吗?这支持吗?如果没有,会是吗?

y2b*_*2bd 6

您可以使用支持方法来伪造它。

class Gen {
    private *_values() {
        yield 3;
        yield 4;
    }

    public get values() {
        return this._values();
    }
}

let g = new Gen();

let v1 = g.values;
let v2 = g.values;

console.log(v1.next());
console.log(v1.next());
console.log(v1.next());
console.log(v2.next());
console.log(v2.next());
console.log(v2.next());

/* stdout
{ value: 3, done: false }
{ value: 4, done: false }
{ value: undefined, done: true }
{ value: 3, done: false }
{ value: 4, done: false }
{ value: undefined, done: true }
*/
Run Code Online (Sandbox Code Playgroud)

  • 如果有生成器 lambda,那就好多了。 (2认同)