Búsqueda de sitios web

¿Cómo reescribir la clase iterable simple de JavaScript a TypeScript?


Escribí la clase iterable simple en JavaScript ES6:

// JavaScript ES6
class FooIterable {
	
	constructor(items){
		this.data = items; 
	}
	
	*[Symbol.iterator](){
		for(let n of this.data){
			yield n;
		}
	}
}

const foo = new FooIterable(['Bob','John','Mark']);

for(let n of foo) console.log(n);

Ahora quiero escribir lo mismo en TypeScript 2.6. Este es mi intento:

class FooIterable {

    data: string[];

    constructor(items : string[]){
        this.data = items; 
    }

    *[Symbol.iterator](){
        for(let n of this.data){
            yield n;
        }
    }
}
const foo = new FooIterable(['Bob', 'John', 'Mark']);
for(let n of foo) console.log(n);

Pero veo tal error en el editor en línea:

¿Cómo puedo hacer lo que necesito?

Respuesta #1

Usar iteradores requiere la opción del compilador downlevelIteration. Desafortunadamente, no veo dónde se expone esta opción en el playground.

Como alternativa, podrías usar Array.from ya que eso lo convertirá en un tipo de array que se puede usar, y .from también usará el iterador internamente.

for (let n of Array.from(foo))

NOTA: para un objetivo que soporte esta iteración de manera nativa (como es6) no necesitas la opción downlevelIteration.

Artículos relacionados