lodash 的 _.memoize with typescript 方法
lodash's _.memoize with typescript methods
有没有人有将 lodash 的 memoize 功能与 typescript 方法相结合的经验?
我知道 typescript 支持装饰器,但我在理解它们时遇到了一些麻烦。
我创建了一个简单的测试代码以使用 lodash wired 进行修改,以便更轻松地解释解决方案:
https://codepen.io/thinkbonobo/pen/XKyaKY?editors=0010
我想记住 运行,这样它 return 就是没有强迫 wait
的答案。如果成功记忆,它将 return "MEMOIZED!!! :)
"
run() {
return this.doSomeProcessing();
}
(N.B., 我建议在编码时注释掉等待函数,这样它就不会在程序尝试 运行)
您可以使用 once
函数 https://lodash.com/docs#once 轻松记忆 run
:
run = _.once(() => {
return this.doSomeProcessing();
});
当然这使它成为成员而不是方法but that's okay。
具有 @memoize()
装饰器的简单而优雅的解决方案:
function memoize() {
return function (target: any, functionName: string) {
target[functionName] = _.memoize(target[functionName]);
};
}
可以轻松改进以支持吸气剂:
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);
};
}
有没有人有将 lodash 的 memoize 功能与 typescript 方法相结合的经验?
我知道 typescript 支持装饰器,但我在理解它们时遇到了一些麻烦。
我创建了一个简单的测试代码以使用 lodash wired 进行修改,以便更轻松地解释解决方案:
https://codepen.io/thinkbonobo/pen/XKyaKY?editors=0010
我想记住 运行,这样它 return 就是没有强迫 wait
的答案。如果成功记忆,它将 return "MEMOIZED!!! :)
"
run() {
return this.doSomeProcessing();
}
(N.B., 我建议在编码时注释掉等待函数,这样它就不会在程序尝试 运行)
您可以使用 once
函数 https://lodash.com/docs#once 轻松记忆 run
:
run = _.once(() => {
return this.doSomeProcessing();
});
当然这使它成为成员而不是方法but that's okay。
具有 @memoize()
装饰器的简单而优雅的解决方案:
function memoize() {
return function (target: any, functionName: string) {
target[functionName] = _.memoize(target[functionName]);
};
}
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);
};
}