← Back to TypeScript Course | Chapter 21: Symbols and Iterators | Lesson 3 of 6

Iterator Protocol की जानकारी

Iterator protocol उन objects को define करता है जो एक next method के through values को एक-एक करके produce करते हैं। TypeScript built-in Iterator type और related iterable types से iterators describe कर सकता है।
Syntax
typescript
const iterable = {
  [Symbol.iterator](): Iterator<Type> {
    return { next: () => ({ value: item, done: false }) };
  },
};

Basic Iterator

एक iterator कोई भी ऐसा object है जिसमें एक next method होता है जो value और done properties रखने वाला एक object return करता है — वह single method ही पूरा contract है जो iterator protocol require करता है।

उदाहरण: Basic Iterator

typescript
const iterator = {
  count: 0,
  next() {
    this.count++;
    return { value: this.count, done: this.count > 3 };
  },
};
console.log(iterator.next());

IteratorResult

एक IteratorResult exactly describe करता है कि next क्या return करता है: या तो done: false के साथ paired एक yielded value, या done: true और typically कोई meaningful value न होने के साथ paired एक completed result।

उदाहरण: IteratorResult

typescript
function makeCounter(): { next(): IteratorResult<number> } {
  let count = 0;
  return {
    next: () => count < 3 ? { value: count++, done: false } : { value: undefined, done: true },
  };
}
const counter = makeCounter();
console.log(counter.next());

Iterable and Iterator

एक iterable object well-known Symbol.iterator key के नीचे एक method provide करता है जो एक iterator return करता है — यह वह specific चीज़ है जो किसी value को for...of, spread operator, और destructuring के साथ उपयोग होने देती है।

उदाहरण: Iterable and Iterator

typescript
const range = {
  [Symbol.iterator]() {
    let n = 0;
    return { next: () => n < 3 ? { value: n++, done: false } : { value: undefined, done: true } };
  },
};
console.log([...range]);

Manual Iterator Consumption

आप repeatedly next call करके और खुद done flag check करके manually एक iterator consume कर सकते हैं, जो exactly वह है जो for...of आपकी तरफ से under the hood करता है।

उदाहरण: Manual Iterator Consumption

typescript
const arr = [1, 2, 3];
const it = arr[Symbol.iterator]();
let result = it.next();
while (!result.done) {
  console.log(result.value);
  result = it.next();
}

Typed Iterable Classes

एक class generic Iterable<T> interface implement कर सकती है एक properly typed Symbol.iterator method expose करने के लिए, इसके instances को iteration protocol पर बने हर language feature में participate करने देते हुए।

उदाहरण: Typed Iterable Classes

typescript
class NumberRange implements Iterable<number> {
  constructor(private end: number) {}
  [Symbol.iterator](): Iterator<number> {
    let n = 0;
    const end = this.end;
    return { next: () => n < end ? { value: n++, done: false } : { value: undefined, done: true } };
  }
}
console.log([...new NumberRange(3)]);
Related Topics
{# common_mistakes/chapter_summary/browser_support: on Hindi pages the view already swaps in the hi_ translation fields (or blanks these out if untranslated), so this renders correctly for both languages without a lang_code check here. #}
आम गलतियां
  1. done: true बहुत जल्दी या कभी return न करना, इसलिए iterator पर एक loop कभी खत्म नहीं होता या last value skip कर देता है।
  2. एक next() method लिखना जो value और done के साथ एक object return नहीं करता।
  3. सिर्फ next() वाले एक object पर for...of try करना, जब इसे एक [Symbol.iterator]() method चाहिए।
🔒

Chapter Quiz — Complete all 6 topics to unlock

0/6 topics done

Complete these topics first:

Login to run this code

C/C++/Java/PHP execution requires a free account. Your code is saved — you'll land right back in the editor after logging in.