В «простом JS» код будет таким:
class Powers {
*[Symbol.iterator]() {
for(let i = 0; i < 10; i++)
yield { i, pow: Math.pow(i, i) }
return null;
}
}
Тогда это можно использовать так:
const powers = [...new Powers()];
Каким должен быть интерфейс Typescript, определить что? Следуя документам здесь , я начал вот так:
interface PowGen {
//where should the * go?
[Symbol.iterator]: () => Generator<any, any, any>
}
Исчерпывающее использование «any» подобным образом решает множество ошибок компилятора, но также дает мне ощущение, что что-то не так мой код. Рядом с [Symbol.iterator]
в интерфейсах Iterator<>
и Generator<>
перечислены методы next
, return
и throw
. Должен ли я их реализовать?
class Powers implements PowGen {
*[Symbol.iterator]():Generator<any, any, any> {
for(let i = 0; i < 10; i++)
yield { i, pow: Math.pow(i, i) }
return null;
}
}
Просто небольшой пример или объяснение, которое немного более подробное, чем документы, которые действительно могут помочь ".