Skip to content

Instantly share code, notes, and snippets.

@vajahath
Created August 13, 2019 09:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vajahath/8ebcff0f1334d81e694eb7ee6826dc85 to your computer and use it in GitHub Desktop.
Save vajahath/8ebcff0f1334d81e694eb7ee6826dc85 to your computer and use it in GitHub Desktop.
typescript decorator example
// function decorator example
function keepTrack() {
// stores(or tracks) input and output
const track: [any, any][] = [];
return {
tracker: <MethodDecorator>(
function(target, prop, descriptor: PropertyDescriptor) {
const method = descriptor.value;
descriptor.value = function(...args: any[]) {
const result = method.apply(this, args);
track.push([args, result]);
return result;
};
}
),
logger: <() => void>function() {
return track;
}
};
}
const { tracker, logger } = keepTrack();
class Cool {
@tracker
static add(a: number, b: number) {
return a + b;
}
@tracker
static makeString(a: string, b: string, c: string) {
return `~~~${a + b + c}~~~`;
}
}
// calls
console.log(Cool.add(5, 8));
console.log(Cool.makeString("lollipop/", "stuffs/", "everywhere"));
console.log("---------------logger-----------------\n", logger());
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment