在角度/打字稿中将类创建为 Iterable

Arc*_*oel 3 iterable typescript angular

我已经在 angular 中创建了一个类,现在当我通过商店订阅获取一个对象时,虽然它返回一个对象数组,但我不能在返回的对象上使用 forEach 循环。

是的,我使用了Object.keys(user).forEach(){..}它正在工作,但我想通过使类 Iterable 来做同样的事情。如何做到这一点。

示例代码:-

class user {
    ...
}
ngOnInit(){
    storeSubsc = this.store.select('users').subscribe(user => {
        this.user = user;
    });
}

login(){
    Object.keys(this.user).forEach()... --> working fine
    I want it like
    this.user.forEach() {... }
}
Run Code Online (Sandbox Code Playgroud)

提前致谢...

Ami*_*ein 5

In order for your class to be iterable, your class needs to have a method of Symbol.iterator:

class User implements Iterable<string> {
    // ...
    constructor(private username: string, private password: string) { }

    *[Symbol.iterator](): Iterator<string> {
        for (let key of Object.keys(this)) {
            yield key;
        }
    }
}

const u = new User('blabla', '1234');
for (let k of u) {
    console.log(k);
}
Run Code Online (Sandbox Code Playgroud)

In this case I used a generator function.