Задать вопрос
copal
@copal
𝄞 ...оооо baby

Как создать типизированный итератор?

Как правильно создавать типизированный итератор?
class Node {
    public id: number;

    constructor(id: number){
        this.id = id;
    }
}

class List {
    public nodeAll: Node[];

    constructor(nodeAll: Node[]){
        this.nodeAll = nodeAll;
    }

    iterator(): Iterator<Node> {
        return this.nodeAll[Symbol.iterator]();
    }
}

let list = new List([new Node(0), new Node(1), new Node(2)]);

let iterator: Iterator<Node> = list.iterator();

for(let node of iterator){
    console.log(node.id);
}


error TS2488: Type must have a '[Symbol.iterator]()' method that returns an iterator.
  • Вопрос задан
  • 3030 просмотров
Подписаться 1 Оценить Комментировать
Решение пользователя Алексей Зуев К ответам на вопрос (2)
Я не уверен, но мне кажется, что typescript ждет интерфейса IterableIterator
interface IterableIterator<T> extends Iterator<T> {
    [Symbol.iterator](): IterableIterator<T>;
}

Попробуйте так
class Node {
    public id: number;

    constructor(id: number){
        this.id = id;
    }
}

class List {
    public nodeAll: Node[];

    constructor(nodeAll: Node[]){
        this.nodeAll = nodeAll;
    }

    iterator(): IterableIterator<Node> {
        return this.nodeAll[Symbol.iterator]();
    }
}

let list = new List([new Node(0), new Node(1), new Node(2)]);

let iterator: IterableIterator<Node> = list.iterator();

for(let node of iterator){
    console.log(node.id);
}
Ответ написан