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]);
    };
}

实例:http://codepen.io/fabien0102/pen/KgPrOy?editors=0012

可以轻松改进以支持吸气剂:

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);
  };
}