Skip to content

Instantly share code, notes, and snippets.

@frontdevops
Created January 22, 2016 14:43
Show Gist options
  • Save frontdevops/336c91e7671f6023711b to your computer and use it in GitHub Desktop.
Save frontdevops/336c91e7671f6023711b to your computer and use it in GitHub Desktop.
TypeScript decorator with arguments example
function logClass(target:any, filterName?:string):any {
var original = target;
function construct(constructor, args) {
let c:any = function () {
return constructor.apply(this, args);
};
c.prototype = constructor.prototype;
return new c;
}
let f:any = (...args) => {
// Filter by Name patch
/////////////////////////////////////
if (filterName == args[0]+args[1]) {
console.log(`Detected new amazing person: ${original.name}(${JSON.stringify(args)})`);
}
else {
console.log(`Create new: ${original.name}(${JSON.stringify(args)})`);
}
//////////////////////////////////////
return construct(original, args);
};
f.prototype = original.prototype;
return f;
}
function logFilter(filter) {
let name = filter.when.name + filter.when.surname;
return (target:any) => {
return logClass(target, name);
}
}
@logFilter({
when: {
name: 'Super',
surname: 'Man'
}
})
class Person {
constructor(
public name:string,
public surname:string
){}
}
let person1 = new Person("Alex", "Mayorov");
let person2 = new Person("Super", "Man");
/* Out:
Create new Person(["Alex","Mayorov"])
Detected new amazing Person(["Super","Man"])
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment