lodash的_.memoize with typescript方法

时间:2016-08-08 21:53:58

标签: typescript decorator lodash

有没有人有任何将lodash的memoize函数与打字稿方法相结合的经验?

我知道打字稿支持装饰,但我在理解它们时遇到了一些麻烦。

我创建了一个简单的测试代码,可以使用lodash进行修改,以便更轻松地解释解决方案:

https://codepen.io/thinkbonobo/pen/XKyaKY?editors=0010

我想记住运行,以便在没有强制wait的情况下返回答案。如果成功备忘,则会返回“MEMOIZED!!! :)

  run() {
    return this.doSomeProcessing();
  }

(N.B。,我建议在编码时注释掉等待函数,以便在程序试图运行时不会给出同步延迟)

3 个答案:

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

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

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