19 lines
755 B
TypeScript
19 lines
755 B
TypeScript
export function Memoize(): Function {
|
|
return function(target: any, propertyKey: string, descriptor: PropertyDescriptor) {
|
|
const originalMethod = descriptor.value;
|
|
descriptor.value = function(this: any, ...args: any[]) {
|
|
const reflectKey = `${JSON.stringify(this)}_${JSON.stringify(args)}_${propertyKey}`;
|
|
const hasReflectData = Reflect.hasMetadata(reflectKey, target);
|
|
|
|
if (hasReflectData) {
|
|
return Reflect.getMetadata(reflectKey, target)
|
|
} else {
|
|
const result = originalMethod.apply(this, args);
|
|
Reflect.defineMetadata(reflectKey, result, target);
|
|
return result;
|
|
}
|
|
}
|
|
|
|
return descriptor;
|
|
}
|
|
} |