javascript - Typescript bir Record türü üzerinde yineleme yap ve güncellenmiş Record'u döndür


Typescript'e yeniyim ve bir Record tipi üzerinde dolaşmam, değerlerde bazı güncellemeler yapmam ve Record'u geri döndürmem gerekiyor.

Türlerin tanımlanma şekli budur:

type Parent = Readonly<Record<string, Children>>;
type Children = ReadonlyArray<string>;

İşte üzerinde yineleme yapmak istediğim bazı örnek veriler:

const data = {
    parent1: ["child1", "child2"],
    parent2: ["child1","child2"]
};

Kayıttaki değerleri güncelleme yöntemi:

const updateChildren = (child: Children) : Children => {
    return child.map( value => value + 'updated');
}

Bunun için sözdizimini yazmakta zorlanıyorum, örnekler aramaya çalıştım ama yardımcı olacak hiçbir şey bulamadım.

Object.entries kullanarak kaydı yineleyebilirim

Object.entries(data).forEach(([key, value]) => console.log(key, value));

Ayrıca Object.keys kullanmayı da denedim

Object.keys(data)
            .map(key => updateChildren(data[key]))

Sanırım yakınım ama haritayı nasıl döndüreceğimi bilmiyorum çünkü burada Dizi [Dizi] döndürüyor

Güncellemeyi yapmak için bazı güzel bir yol var mı ve bu, kullanılan aynı türde güncellenmiş veriyi döndürür mü?

Okuduğunuz için teşekkürler.

Aşağıda yapmaya çalıştığım şeyin JavaScript kod parçacığı ve aşağıdaki örnekte updatedMap'i almayı gösteriyor.

const data = {
    parent1: ["child1", "child2"],
    parent2: ["child1","child2"]
};

function updateChildren(children) {
  return children.map(child => child+'updated');
}

const updatedMap = new Map();

for (const [key, value] of Object.entries(data)) {
  updatedMap.set(key, updateChildren(value));
}

updatedMap.forEach((value, key) => console.log(key + ":" + value));


console.log(Object.keys(data).map(key => updateChildren(data[key])));

Cevap #1

Böyle bir şey...

type Children = ReadonlyArray<string>;

const data: Parent = {
  parent1: ["child1", "child2"],
  parent2: ["child1", "child2"],
};


type MutableObject<T> = { -readonly [P in keyof T]: T[P] };

const updateChildren = (child: Children): Children => {
  return child.map(value => value + 'updated');
}

let newObj: Parent = Object.entries(data).reduce<MutableObject<Parent>>((acc, cur) => {
  acc[cur[0]] = updateChildren(cur[1]);
  return acc;
}, {})

console.log(newObj)

İlgili makaleler