Javascript “如何成功”;“合并”;两组带有getter的普通对象?
下面我有两组普通对象,每个对象中都有一个getter。我很想找到一种方法来合并这两个对象。然而,当我合并它们时,我希望它们仍然是getter。我不希望解析side getter中的值Javascript “如何成功”;“合并”;两组带有getter的普通对象?,javascript,typescript,Javascript,Typescript,下面我有两组普通对象,每个对象中都有一个getter。我很想找到一种方法来合并这两个对象。然而,当我合并它们时,我希望它们仍然是getter。我不希望解析side getter中的值 const love = { get cats() { return 'meow'; }, }; const hate = { get dogs() { return 'woof'; }, }; console.log({...love, ...hate}); // { cats
const love = {
get cats() {
return 'meow';
},
};
const hate = {
get dogs() {
return 'woof';
},
};
console.log({...love, ...hate}); // { cats: 'meow', dogs: 'woof' }
console.log(Object.assign(love, hate)); // { cats: [Getter], dogs: 'woof' }
使用
defineProperties
将属性放在对象上,将对象中的值分散到对象中。getOwnPropertyDescriptors
:
const love={
捉猫{
“喵喵”一声;
},
};
恒恨={
养狗{
返回“纬”;
},
};
const result=Object.defineProperties({}{
…Object.getOwnPropertyDescriptors(爱),
…Object.getOwnPropertyDescriptors(hate),
});
log(Object.getOwnPropertyDescriptor(结果为'dogs')代码>从@CertainPerformances获得了这个小金块答案:
function mergeGetters<A, B>(a: A, b: B): A & B {
const result = Object.defineProperties(
{},
{
...Object.getOwnPropertyDescriptors(a),
...Object.getOwnPropertyDescriptors(b),
}
);
return result;
}
函数合并器(a:a,b:b):a&b{
const result=Object.defineProperties(
{},
{
…对象.getOwnPropertyDescriptors(a),
…对象.getOwnPropertyDescriptors(b),
}
);
返回结果;
}
不要使用扩展语法或对象。分配
,它们将始终调用getter。所有宝贵的类型信息都消失了@ThomasReggiconst result:typeof love&typeof hate=…
应该可以解决这个问题