2017-05-12 18 views
4

typescriptですにおける発電方法を作る簡単です:活字体ジェネレータープロパティ/ゲッター

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

しかし、私は発電機プロパティを作りたい、このような何か:

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

しかし、それがいるようです無効である。私はこの質問や回避策への参照を見つけることができないようです(Object.definePropertyを明示的に使用することは明白ですが、明示的ではありません。何か不足していますか?これはサポートされていますか?そうでない場合は、それはなりますか?

答えて

3

バッキング方法で偽装することができます。

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

ジェネレータのラムダだけがあれば、これはもっとすばらしいでしょう。 –