egenskaper - Typescript Generator Egenskap/Getter


Att skapa en generatorfunktion i TypeScript är enkelt:

class Foo {
    *values() { yield 10 }
}

Men jag vill skapa en generator-egenskap, något som detta:

class Foo {
    get *values() { yield 10 }
}

Men det verkar vara ogiltigt. Jag verkar inte kunna hitta några referenser till denna fråga eller lösningar (förutom det uppenbara att använda Object.defineProperty explicit, vilket skulle vara dåligt eftersom det skulle vara utan typning). Missar jag något? Är detta stödjat? Om inte, kommer det att bli det?

Svar #1

Du skulle kunna fejka det med en stödjande metod.

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 }
*/

Relaterade artiklar