Skip to content

Commit 75cf9f1

Browse files
committed
feat: add decorator with params example
1 parent 6da4963 commit 75cf9f1

6 files changed

Lines changed: 104 additions & 8 deletions

File tree

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5+
return c > 3 && r && Object.defineProperty(target, key, r), r;
6+
};
7+
function raddoppia(options) {
8+
return function (target, key, descriptor) {
9+
const originalMethod = descriptor.value;
10+
descriptor.value = function (...args) {
11+
if (options.duplica === true) {
12+
args[0] *= 2;
13+
console.log(args);
14+
}
15+
originalMethod.apply(this, args);
16+
};
17+
return descriptor;
18+
};
19+
}
20+
class UnaClasse {
21+
unMetodo(numero) {
22+
console.log(`Dentro alla funzione il numero è ${numero}`);
23+
}
24+
}
25+
__decorate([
26+
raddoppia({ duplica: true }),
27+
raddoppia({ duplica: true }),
28+
raddoppia({ duplica: true })
29+
], UnaClasse.prototype, "unMetodo", null);
30+
// Creare un'istanza della classe e chiamare il metodo decorato
31+
const unaIstanza = new UnaClasse();
32+
unaIstanza.unMetodo(654);

typescript/decorators/con-parametri/package-lock.json

Lines changed: 31 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"dependencies": {
3+
"typescript": "^5.3.3"
4+
}
5+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
function raddoppia(options: { duplica: boolean }): any {
2+
return function (target: any, key: string, descriptor: PropertyDescriptor) {
3+
const originalMethod = descriptor.value;
4+
descriptor.value = function (...args: any[]) {
5+
if (options.duplica === true) {
6+
args[0] *= 2;
7+
console.log(args)
8+
}
9+
originalMethod.apply(this, args)
10+
}
11+
return descriptor
12+
}
13+
}
14+
15+
class UnaClasse {
16+
@raddoppia({ duplica: true })
17+
@raddoppia({ duplica: true })
18+
@raddoppia({ duplica: true })
19+
unMetodo(numero : number) {
20+
console.log(`Dentro alla funzione il numero è ${numero}`);
21+
}
22+
}
23+
24+
// Creare un'istanza della classe e chiamare il metodo decorato
25+
const unaIstanza = new UnaClasse();
26+
unaIstanza.unMetodo(654);
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"compilerOptions": {
3+
"target": "ES6",
4+
"experimentalDecorators": true,
5+
"outDir": "./build/"
6+
}
7+
}
Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,12 @@
1-
function decoratore() {
1+
function decoratore(options) {
2+
console.log(options)
23
return function (target : any, key : string, descriptor: PropertyDescriptor) {
34
console.log(`dentro al decorator decoratore`)
45
return descriptor.value.apply(this, arguments)
56
}
67
}
78

8-
function cose (target : any, key : string, descriptor: PropertyDescriptor) {
9-
console.log(`dentro al decorator cose`)
10-
return descriptor.value.apply(this, arguments)
11-
}
12-
139
class Foo {
14-
@decoratore()
15-
@cose
10+
@decoratore({op: "zioni"})
1611
funzione () { console.log(`dentro alla funzione`); }
1712
}

0 commit comments

Comments
 (0)