Iterables and Generators
Custom Iterable Objects
An object can work with for...of when it provides an iterator.
Custom Iterable Objects
custom.ts
class NumberRange implements Iterable<number> {
start: number;
end: number;
constructor(start: number, end: number) {
this.start = start;
this.end = end;
}
[Symbol.iterator](): Iterator<number> {
let current: number = this.start;
const last: number = this.end;
return {
next(): IteratorResult<number> {
if (current <= last) {
const value: number = current;
current = current + 1;
return { value: value, done: false };
}
return { value: 0, done: true };
},
};
}
}
const endValue: number = ;
const range: NumberRange = new NumberRange(1, endValue);
const visited: number[] = [];
for (const value of range) {
visited.push(value);
}
console.log(visited.join("-"));
class NumberRange implements Iterable<number> {
start: number;
end: number;
constructor(start: number, end: number) {
this.start = start;
this.end = end;
}
[Symbol.iterator](): Iterator<number> {
let current: number = this.start;
const last: number = this.end;
return {
next(): IteratorResult<number> {
if (current <= last) {
const value: number = current;
current = current + 1;
return { value: value, done: false };
}
return { value: 0, done: true };
},
};
}
}
const endValue: number = ;
const range: NumberRange = new NumberRange(1, endValue);
const visited: number[] = [];
for (const value of range) {
visited.push(value);
}
console.log(visited.join("-"));
class NumberRange implements Iterable<number> {
start: number;
end: number;
constructor(start: number, end: number) {
this.start = start;
this.end = end;
}
[Symbol.iterator](): Iterator<number> {
let current: number = this.start;
const last: number = this.end;
return {
next(): IteratorResult<number> {
if (current <= last) {
const value: number = current;
current = current + 1;
return { value: value, done: false };
}
return { value: 0, done: true };
},
};
}
}
const endValue: number = ;
const range: NumberRange = new NumberRange(1, endValue);
const visited: number[] = [];
for (const value of range) {
visited.push(value);
}
console.log(visited.join("-"));
custom iterable
A custom iterable implements `Symbol.iterator` and returns an iterator with a `next` method.