Learn
← Previous Next →

Decorators

12 min Last updated 23 Mar 2026

Decorators di TypeScript

Decorators adalah fitur TypeScript (dan proposal JavaScript) yang memungkinkan kita menambahkan perilaku atau metadata ke class, method, property, atau parameter menggunakan sintaks @nama.

Mengaktifkan Decorators

Tambahkan di tsconfig.json:

{
  "compilerOptions": {
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true
  }
}

Class Decorator

function Sealed(constructor: Function) {
  Object.seal(constructor);
  Object.seal(constructor.prototype);
}

@Sealed
class BankAccount {
  balance: number = 0;

  deposit(amount: number) {
    this.balance += amount;
  }
}

Method Decorator

function Log(target: any, key: string, descriptor: PropertyDescriptor) {
  const original = descriptor.value;
  descriptor.value = function(...args: any[]) {
    console.log(`Memanggil ${key} dengan:`, args);
    const result = original.apply(this, args);
    console.log(`${key} mengembalikan:`, result);
    return result;
  };
  return descriptor;
}

class Calculator {
  @Log
  add(a: number, b: number): number {
    return a + b;
  }
}

Penggunaan di Dunia Nyata

  • Framework NestJS menggunakan decorators secara ekstensif (@Controller, @Get, @Injectable)
  • TypeORM menggunakan @Entity, @Column untuk mendefinisikan schema database
  • Angular menggunakan @Component, @Service, @Input