Açısal olarak iterable olarak sınıf oluşturma / typescript

oy
1

Bunun nesnenin bir dizi döner rağmen, depo abonelik ile bir nesne getirme hemen zaman açısal bir sınıf, oluşturduk ama geri nesnesinde forEach döngü kullanamaz.

Evet, kullanmış Object.keys (kullanıcı) .forEach () {..} O çalışıyor, ama sınıf iterable yaparak aynı şeyi yapmak istiyorum. Bu nasıl belirleyin.

Basit kod:-

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() {... }
}

Şimdiden teşekkürler...

Oluştur 24/08/2018 saat 11:47
kaynak kullanıcı
Diğer dillerde...                            


3 cevaplar

oy
2

Sınıf iterable olmak için, sınıf bir yöntem olması gerekir 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);
}

Bu durumda bir jeneratör işlevi kullanılır.

Cevap 24/08/2018 saat 12:16
kaynak kullanıcı

oy
1

Sen kullanabilirsiniz for inoperatörünü:

class User {
  // 
}

const user = new User(/*args*/); 
for (let prop in user) {
  console.log(prop, user[prop]);
}

Sınıf örneği varsa Ayrıca, kontrol edebilirsiniz propgibi kendi özelliğini user.hasOwnProperty(prop)for indöngü. Senin Örneğin, Usersınıf kontrol etmeden başka temel sınıfını genişletir ve hasOwnPropertysiz göreceksiniz constructoryanı:

class BaseUser {
  constructor(public x, public y) { }
}

class User extends BaseUser {
  constructor(public a, public b, public x, public y) {
    super(x, y);
  }
}

const user = new User('12', 2, 111, 222); 
for (let prop in user) {
  alert(prop);
}

Beş uyarıları göreceksiniz: x, y, a, b, constructor.

Cevap 24/08/2018 saat 12:10
kaynak kullanıcı

oy
-1

Böyle bir şey?

class User {
  constructor(public id: number, public name: string) {}

  iterate(callBack: Function) {
    return Object.keys(this).forEach(key => callBack(this[key]));
  }

}

const user = new User(1, 'Foo Bar');
user.iterate(item => console.log(item));
Cevap 24/08/2018 saat 11:59
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more