打字稿:使类对象可迭代 [英] typescript: make class objects iterable

查看:34
本文介绍了打字稿:使类对象可迭代的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何使 Typescript 对象可迭代?在 Python 3 中我可以做

How to make Typescript objects iterable? In Python 3 I can do

class EndlessCounter:
    def __init__(self):
        self.count = 0

    def __iter__(self):
        return self

    def __next__(self):
        self.count += 1
        return self.count

但是这个代码的 Typescript 等价物是什么?

but what is the Typescript equivalent of this code?

谢谢!

推荐答案

Javascript 支持 迭代器和生成器,打字稿并没有增加太多:打字稿迭代器和生成器.

Javascript supports Iterators and generators, typescript doesn't add much to it: typescript Iterators and Generators.

您的代码可以在 javascript 中这样完成:

Your code can be done like this in javascript:

function* generator() {
    let counter = 0;
    while (true) {
        yield counter++;
    }
}

var iterator = generator();
console.log(iterator.next().value); // 0
console.log(iterator.next().value); // 1
console.log(iterator.next().value); // 2

<小时>

编辑

你可以用一个类来做同样的事情:


Edit

You can do the same with a class:

class Counter implements Iterator<number> {
    private counter = 0;

    public next(): IteratorResult<number> {
        return {
            done: false,
            value: this.counter++
        }
    }
}

let c = new Counter();
console.log(c.next().value); // 0
console.log(c.next().value); // 1
console.log(c.next().value); // 2

<小时>

第二次编辑

使用生成器的第一个解决方案适用于 for/of 循环:


2nd Edit

The first solution with the generator works well with the for/of loop:

function* generator() {
    let counter = 0;
    while (counter < 5) {
        yield counter++;
    }
}
for (let i of generator()) console.log(i);

打印 0 到 5,但是,要使用您需要执行的实例执行此操作:

Prints 0 to 5, however, to do that with an instance you'll need to do:

class Counter implements Iterable<number> {
    private counter = 0;

    public [Symbol.iterator]() {
        return {
            next: function() {
                return {
                    done: this.counter === 5,
                    value: this.counter++
                }
            }.bind(this)
        }
    }
}
let c = new Counter();
for (let i of c) console.log(i);

这篇关于打字稿:使类对象可迭代的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆