Javascript supports Iterators and generators, typescript doesn't add much to it: typescript Iterators and Generators.
Your code can be done like this in javascript:
function* generator() {
let counter = 0;
while (true) {
yield counter++;
}
}
var iterator = generator();
console.log(iterator.next().value); // 0
console.log(iterator.next().value); // 1
console.log(iterator.next().value); // 2
Edit
You can do the same with a class:
class Counter implements Iterator<number> {
private counter = 0;
public next(): IteratorResult<number> {
return {
done: false,
value: this.counter++
}
}
}
let c = new Counter();
console.log(c.next().value); // 0
console.log(c.next().value); // 1
console.log(c.next().value); // 2
2nd Edit
The first solution with the generator works well with the for/of loop:
function* generator() {
let counter = 0;
while (counter < 5) {
yield counter++;
}
}
for (let i of generator()) console.log(i);
Prints 0 to 5, however, to do that with an instance you'll need to do:
class Counter implements Iterable<number> {
private counter = 0;
public [Symbol.iterator]() {
return {
next: function() {
return {
done: this.counter === 5,
value: this.counter++
}
}.bind(this)
}
}
}
let c = new Counter();
for (let i of c) console.log(i);
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…