typescript - Setters & Getters Başka Bir Özelliği Haritalama Angular'ın HttpClient'ını Kullanırken Tanımsız Döndürüyor
TypeScript'te Angular'ın (v5) HttpClient'inden alındığında, nesnedeki başka bir açık özelliği ayarlayan/döndüren setter ve getter'larla ilgili bazı garip davranışlar yaşıyorum.
İşte önemli yapılar:
export interface NamedEntity {
id: number;
name: string;
priority?: number;
}
export Rule implements NamedEntity {
ruleId: number;
ruleName: string;
//..other properties
get id(): number {
return this.ruleId;
}
set id(id: number){
this.ruleId = id;
}
get name(): string {
return this.ruleName;
}
set name(name: string){
this.ruleName = name;
}
}
//Another class that implements NamedEntity in the same way
HttpClient kullanarak Rule nesnelerini şu şekilde alıyorum:
return http.get<Rule[]>("my url");
O Observable<Rule>'a abone olduğumda, getter/setter olmayan tüm özelliklerin hem hata ayıklayıcımda hem de Angular şablonlarımda sorunsuz bir şekilde görüntülendiğini fark ettim. Ancak, setter/getter tabanlı özellikler hata ayıklayıcıda her zaman undefined olarak ve Angular şablonumda boş olarak görüntüleniyor.
Benim Angular projem Angular-CLI ile kuruldu ve tsconfig.json dosyamda hedef "es5" olarak ayarlanmış.
Bu büyük olasılıkla HttpClient'in verileri TypeScript tarafından oluşturulan Rule arayüzünün şeklinde dönüştürmesinden kaynaklanmaktadır. HttpClient çağrısından elde edilen nesnelerin, arayüz yerine somut Rule sınıfının örnekleri olmasını nasıl sağlayabilirim?
Cevap #1
Emin olmak için daha fazla koda bakmam gerekir ... ama tahmin ediyorum ki HTTP isteğinizin bir Rule nesnesi döndürmesini bekliyorsunuz. Döndürmez. Bunun yerine, Rule nesnesi tarafından tanımlanan özelliklerle birlikte verilerini döndürür. Yani nesnenin herhangi bir getter, setter veya metoduna sahip değildir.
Eğer nesneniz genel olarak düz (hiyerarşi yok) ise, şöyle bir şey yapabilirsiniz:
x = Object.assign(new Rule(), rule);
Burada rule, Http çağrısından geri dönen değerdir.
Bu kod, yeni bir Rule nesnesi oluşturur (sonrasında getter, setter ve metodlara sahip olur) ve verileri buna kopyalar.
