typescript - Object.assign() kullanırken yalnızca getter içeren özellikler nasıl yoksayılır?


Tanımı yapılmamış bir tip ile bir kaynak nesnem var, ancak tipli bir nesneyi temsil ediyor. Bu yüzden Object.assign(target, source) kullanıyorum. Ama sınıfımın getter olan özellikleri var (çünkü bunlar diğer özelliklerin hesaplamalarının sonuçları).

Bir örnek:

source: {
  a: 1,
  b: 2,
  sum: 3
}

class SomeClass {
  a: number;
  b: number;

  get sum(): number {
    return a + b;
  }
}

someFunction() {
  let obj = new SomeClass();
  Object.assign(obj, source);
}

Yukarıdaki durumda, şu hatayı alıyorum: Yalnızca bir get özelliğine sahip olan [object Object] öğesinin sum özelliğini ayarlayamazsınız.

Object.assign() yönteminin kaynak nesnedeki bu özellikleri görmezden gelmesinin herhangi bir yolu var mı?

Cevap #1

Bunun için Object.assign() kullanamazsınız, çünkü

Object.assign() yöntemi, bir veya birden fazla kaynak nesneden hedef nesneye tüm sayılabilir kendi özelliklerin değerlerini kopyalamak için kullanılır.

Başka bir deyişle, Object.assign(), source nesnesinin sayılabilir özellikleri tarafından yönlendirilir ve özelliklerin hedefte nasıl tanımlandığından etkilenmez.

Hedef için yazılabilir olmayan özellikleri atlayacak kendi işlevinizi Object.assign() yerine uygulamanız veya bunu yapan bir kütüphane bulmanız gerekiyor.

Cevap #2

Bunun için geçici bir çözüm, sadece boş bir setter bulundurmaktır:

get sum(): number {
    return a + b;
}

set sum(value) {}

İlgili makaleler