有没有人有任何将lodash的memoize函数与打字稿方法相结合的经验?
我知道打字稿支持装饰,但我在理解它们时遇到了一些麻烦。
我创建了一个简单的测试代码,可以使用lodash进行修改,以便更轻松地解释解决方案:
https://codepen.io/thinkbonobo/pen/XKyaKY?editors=0010
我想记住运行,以便在没有强制wait
的情况下返回答案。如果成功备忘,则会返回“MEMOIZED!!! :)
”
run() {
return this.doSomeProcessing();
}
(N.B。,我建议在编码时注释掉等待函数,以便在程序试图运行时不会给出同步延迟)
答案 0 :(得分:2)
您可以使用run
函数https://lodash.com/docs#once轻松记忆once
:
run = _.once(() => {
return this.doSomeProcessing();
});
当然这使它成为一个成员而不是方法but that's okay。
答案 1 :(得分:1)
拥有@memoize()
装饰器的简单而优雅的解决方案:
function memoize() {
return function (target: any, functionName: string) {
target[functionName] = _.memoize(target[functionName]);
};
}
答案 2 :(得分:1)
fabien0102's solution以支持getter:
export function memoize() {
return function (target: any, functionName: string, descriptor: PropertyDescriptor) {
if (descriptor.get) descriptor.get = _.memoize(descriptor.get, function<T>(this: T):T { return this; });
else descriptor.value= _.memoize(descriptor.value);
};
}