Cara Membuat Dekorator TypeScript Kustom
Dekorator adalah fitur dalam TypeScript yang memungkinkan modifikasi kelas, metode, properti, atau parameter saat runtime. Dekorator adalah fungsi khusus yang menyediakan kemampuan meta-pemrograman. Dalam TypeScript, dekorator sering digunakan dalam kerangka kerja seperti Angular untuk meningkatkan fungsionalitas. Artikel ini menjelaskan cara membuat dekorator kustom langkah demi langkah.
Jenis Dekorator dalam TypeScript
Ada empat jenis dekorator utama di TypeScript:
- Dekorator Kelas
- Dekorator Metode
- Dekorator Aksesori
- Dekorator Properti
Mengaktifkan Dekorator di TypeScript
Untuk menggunakan dekorator dalam proyek TypeScript, opsi experimentalDecorators
harus diaktifkan dalam file tsconfig.json
.
{
"compilerOptions": {
"experimentalDecorators": true
}
}
Membuat Dekorator Kelas
Dekorator kelas diterapkan pada konstruktor suatu kelas. Dekorator ini berguna untuk menambahkan metadata atau fungsi ke kelas. Berikut ini contoh cara membuat dekorator kelas sederhana.
function logClass(constructor: Function) {
console.log(`Class ${constructor.name} is created`);
}
@logClass
class Person {
constructor(public name: string) {}
}
const person = new Person("John");
// Output: Class Person is created
Membuat Dekorator Metode
Dekorator metode diterapkan pada metode kelas. Dekorator ini dapat digunakan untuk mengubah atau mengamati perilaku metode. Berikut ini adalah contoh dekorator metode yang mencatat eksekusi metode.
function logMethod(target: any, propertyKey: string, descriptor: PropertyDescriptor) {
const originalMethod = descriptor.value;
descriptor.value = function (...args: any[]) {
console.log(`Method ${propertyKey} is called with arguments:`, args);
return originalMethod.apply(this, args);
};
return descriptor;
}
class Calculator {
@logMethod
add(a: number, b: number) {
return a + b;
}
}
const calc = new Calculator();
calc.add(2, 3);
// Output: Method add is called with arguments: [2, 3]
Membuat Dekorator Properti
Dekorator properti dapat digunakan untuk mengamati atau mengubah properti. Berikut ini contoh di mana dekorator properti memastikan bahwa properti memiliki nilai default.
function defaultValue(value: any) {
return function (target: any, propertyKey: string) {
let propertyValue = value;
const getter = function () {
return propertyValue;
};
const setter = function (newValue: any) {
propertyValue = newValue || value;
};
Object.defineProperty(target, propertyKey, {
get: getter,
set: setter,
enumerable: true,
configurable: true,
});
};
}
class User {
@defaultValue('Anonymous')
name!: string;
}
const user = new User();
console.log(user.name); // Output: Anonymous
user.name = 'Alice';
console.log(user.name); // Output: Alice
Membuat Dekorator Parameter
Dekorator parameter diterapkan pada parameter suatu metode. Dekorator ini dapat berguna untuk tugas seperti validasi atau pencatatan argumen. Berikut ini contoh dekorator parameter.
function logParameter(target: any, propertyKey: string, parameterIndex: number) {
console.log(`Parameter at index ${parameterIndex} in method ${propertyKey} is being decorated`);
}
class Vehicle {
drive(@logParameter speed: number) {
console.log(`Driving at speed ${speed}`);
}
}
const vehicle = new Vehicle();
vehicle.drive(50);
// Output: Parameter at index 0 in method drive is being decorated
Kesimpulan
Dekorator dalam TypeScript menawarkan kemampuan meta-pemrograman yang hebat yang dapat meningkatkan dan memperluas fungsionalitas kelas, metode, dan properti. Dengan menggunakan dekorator khusus, Anda dapat membuat struktur kode yang dapat digunakan kembali, efisien, dan terorganisasi. Panduan ini menunjukkan pembuatan berbagai jenis dekorator: kelas, metode, properti, dan parameter.