Saltar al contenido principal
Curso/Asincronía/Iteradores e Iterables
Volver a Asincronía

Asincronía — Leccion 5

·15 min

Iteradores e Iterables

Implementa el protocolo de iteración en tus objetos.

Protocolo de Iteración

any objeto con [Symbol.iterator] es iterable.

typescript
class Rango {
  constructor(private inicio: number, private fin: number) {}

  [Symbol.iterator]() {
    let actual = this.inicio;
    const fin = this.fin;

    return {
      next() {
        if (actual <= fin) {
          return { value: actual++, done: false };
        }
        return { done: true };
      }
    };
  }
}

const rango = new Rango(1, 5);
for (const num of rango) {
  console.log(num); // 1, 2, 3, 4, 5
}

Spread con iterables

typescript
const numeros = [...new Rango(1, 5)]; // [1, 2, 3, 4, 5]

Generator cómo iterable

typescript
function* rango(inicio: number, fin: number) {
  for (let i = inicio; i <= fin; i++) {
    yield i;
  }
}

for (const num of rango(1, 5)) {
  console.log(num);
}

Custom iterator con Clase

typescript
class Coleccion<T> {
  private items: T[] = [];

  agregar(item: T) {
    this.items.push(item);
  }

  [Symbol.iterator]() {
    let index = 0;
    const items = this.items;

    return {
      next() {
        if (index < items.length) {
          return { value: items[index++], done: false };
        }
        return { done: true };
      }
    };
  }
}

Ejercicio pratico

Crea una clase iterable que genere los numeros pares del 0 al 10.

exercise.ts
Loading...
Resultado

Haz clic en "Ejecutar" para ver el resultado...

Ir al examen del modulo
Curso de TypeScript — Aprende desde cero