annotations-design-patterns
    Preparing search index...

    Function Memoize

    • Cachea el resultado del método por combinación de argumentos y por instancia. Pensado para métodos puros. Puede usarse directo (@Memoize) o con opciones (@Memoize({ key })).

      La clave por defecto es JSON.stringify(args), con limitaciones:

      • lanza con argumentos que contengan referencias circulares;
      • las funciones y los Symbol se serializan como nada (undefined), así que argumentos distintos pueden COLISIONAR en la misma entrada;
      • {a:1, b:2} y {b:2, a:1} generan claves distintas (el orden de las propiedades importa). Para esos casos, aporta tu propio resolver con la opción key, o usa @MemoizeByRef si prefieres comparar los argumentos por referencia.

      Type Parameters

      • This extends object
      • Args extends unknown[]
      • Return

      Parameters

      Returns (this: This, ...args: Args) => Return

      class Api {
      @Memoize
      expensiveComputation(n: number): number { ... }

      @Memoize({ key: (user: User) => user.id })
      permissions(user: User): Permission[] { ... }
      }
    • Cachea el resultado del método por combinación de argumentos y por instancia. Pensado para métodos puros. Puede usarse directo (@Memoize) o con opciones (@Memoize({ key })).

      La clave por defecto es JSON.stringify(args), con limitaciones:

      • lanza con argumentos que contengan referencias circulares;
      • las funciones y los Symbol se serializan como nada (undefined), así que argumentos distintos pueden COLISIONAR en la misma entrada;
      • {a:1, b:2} y {b:2, a:1} generan claves distintas (el orden de las propiedades importa). Para esos casos, aporta tu propio resolver con la opción key, o usa @MemoizeByRef si prefieres comparar los argumentos por referencia.

      Parameters

      Returns <This extends object, Args extends unknown[], Return>(
          target: (this: This, ...args: Args) => Return,
          context: ClassMethodDecoratorContext<
              This,
              (this: This, ...args: Args) => Return,
          >,
      ) => (this: This, ...args: Args) => Return

      class Api {
      @Memoize
      expensiveComputation(n: number): number { ... }

      @Memoize({ key: (user: User) => user.id })
      permissions(user: User): Permission[] { ... }
      }