Hari 15: Decorators Dasar
65 min
Last updated 09 Apr 2026
Decorators (TypeScript 5 / Stage 3)
// Class decorator
function Loggable(target: Function) {
console.log(`Class ${target.name} dimuat`);
}
// Method decorator
function Log(target: any, key: string, descriptor: PropertyDescriptor) {
const original = descriptor.value;
descriptor.value = function(...args: any[]) {
console.log(`Memanggil ${key}(${args.join(", ")})`);
const result = original.apply(this, args);
console.log(`${key} return: ${result}`);
return result;
};
return descriptor;
}
@Loggable
class Kalkulator {
@Log
tambah(a: number, b: number): number { return a + b; }
@Log
kali(a: number, b: number): number { return a * b; }
}
const k = new Kalkulator();
k.tambah(3, 4); // Log: "Memanggil tambah(3, 4)" → "tambah return: 7"
Note: Di playground ini, kita simulasikan decorator secara manual karena keterbatasan environment.
💡
Notice: Decorator pattern = Higher-Order Function yang wraps fungsi lain. Di TypeScript 5, decorator menggunakan syntax @decorator langsung di atas class/method.
Assignment
Simulasikan decorator @Log menggunakan Higher-Order Function. Buat fungsi log(fn) yang wrap fungsi dengan logging. Test dengan fungsi bagi(a,b).
Expected output:
bagi(10, 2) = 5
bagi(15, 3) = 5
bagi(100, 4) = 25
TS
index.ts
Solution
Output