Learn
← Previous Next →

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