2017-05-12 75 views
4

製作的打字稿發電機的方法很簡單:打字稿發電機房產/消氣

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

如果只有發生器lambdas,這將是非常好。 –