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,@Columnuntuk mendefinisikan schema database - Angular menggunakan
@Component,@Service,@Input