我经常遇到这样的情况:在解构对象之前,我想对某个对象的属性调用相同的方法。例如,我有一个记录,其中一些属性有一个从信号/回调返回值的方法,而其他属性有一个相同的方法,只返回一个普通值。我想解构它们,这样我就只得到值了:
type ValueLike<T> = { value(): T };
const cb = () => 50;
const aProp: ValueLike<number> = { value: () => cb() };
const bProp: ValueLike<number> = { value: () => 100 };
const props = { a: aProp, b: bProp };
const { a, b } = props // Want to end up with { a: 50, b: 100 };
字符串
当然,我可以写一些辅助函数,称为类似unwrapAll()
的东西,它接受一个对象,在每个属性上调用.value()
,将这些属性分配给一个新对象,然后解构它。然而,我想知道是否有某种方法可以避免创建中间对象,而不必单独分配每个属性(即const a = props.a.value(), const b = props.b.value(), ...
)。
1条答案
按热度按时间new9mtju1#
在解构对象的同时不能进行其他处理。
然而,有一种类似于deleted answer的方法,它使用getter函数来实现你的目标,它不可避免地创建了一个中间对象,只有
value()
在解构时才会被调用。字符串