code: function memoizeWith(getMemoizeParams_propName) {
      return (target, propertyKey, descriptor) => {
          return decorate(descriptor, {
              getAdditionalArgs: function () {
                  let fn = this[getMemoizeParams_propName];
                  return fn.call(this);
              }
          });
      };
  }
docs: /** * Generates a method decorator that creates a memoized version of a function with additional args to control memoization * @param getAdditionalMemoizeArgs A function that returns additional arguments for controlling memoization. *                                 If this is an inline function, it must be defined like *                                     <code>function() { return [this.a, this.b]; }</code> *                                 rather than *                                     <code>() => [this.a, this.b]</code> *                                 because when decorators are evaluated the 'this' context is undefined.  export function memoizeWith<T, TARGET>(getAdditionalMemoizeArgs:(this:TARGET, self:TARGET)=>any[]) :<T>( target: TARGET, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor<T> ) => TypedPropertyDescriptor<T> | void { return (target: Object, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor<T>):TypedPropertyDescriptor<T> => { return decorate(descriptor, getAdditionalMemoizeArgs); }; } 
  Generates a method decorator that creates a memoized version of a function with additional args to control memoization
  @param getMemoizeParams_propName The name of another class method that returns additional arguments for controlling memoization.