Özel TypeScript Dekoratörleri Nasıl Oluşturulur
Dekoratörler, TypeScript'te sınıfları, yöntemleri, özellikleri veya parametreleri çalışma zamanında değiştirmeye olanak tanıyan bir özelliktir. Bunlar, meta programlama yetenekleri sağlayan özel işlevlerdir. TypeScript'te dekoratörler, işlevselliği artırmak için genellikle Angular gibi çerçevelerde kullanılır. Bu makale, özel dekoratörlerin adım adım nasıl oluşturulacağını açıklar.
TypeScript'te Dekoratör Türleri
TypeScript'te dört ana dekoratör türü vardır:
- Sınıf Dekoratörleri
- Yöntem Dekoratörleri
- Aksesuar Dekoratörleri
- Emlak Dekoratörleri
TypeScript'te Dekoratörleri Etkinleştirme
TypeScript projesinde dekoratörleri kullanmak için tsconfig.json
dosyasında experimentalDecorators
seçeneğinin etkinleştirilmesi gerekir.
{
"compilerOptions": {
"experimentalDecorators": true
}
}
Sınıf Dekoratörü Oluşturma
Sınıf dekoratörleri bir sınıfın kurucusuna uygulanır. Sınıfa meta veri veya işlevsellik eklemek için faydalıdırlar. İşte basit bir sınıf dekoratörünün nasıl oluşturulacağına dair bir örnek.
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
Bir Yöntem Dekoratörü Oluşturma
Yöntem dekoratörleri sınıf yöntemlerine uygulanır. Yöntemin davranışını değiştirmek veya gözlemlemek için kullanılabilirler. Aşağıda yöntem yürütmesini kaydeden bir yöntem dekoratörünün örneği verilmiştir.
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]
Bir Emlak Dekoratörü Oluşturma
Özellik dekoratörleri, özellikleri gözlemlemek veya değiştirmek için kullanılabilir. İşte bir özellik dekoratörünün bir özelliğin varsayılan bir değere sahip olmasını sağladığı bir örnek.
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
Bir Parametre Dekoratörü Oluşturma
Parametre dekoratörleri bir yöntemin parametrelerine uygulanır. Doğrulama veya argümanları günlüğe kaydetme gibi görevler için yararlı olabilirler. İşte bir parametre dekoratörü örneği.
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
Çözüm
TypeScript'teki dekoratörler, sınıfların, yöntemlerin ve özelliklerin işlevselliğini geliştirebilen ve genişletebilen güçlü meta programlama yetenekleri sunar. Özel dekoratörler kullanarak yeniden kullanılabilir, verimli ve düzenli kod yapıları oluşturmak mümkündür. Bu kılavuz, farklı dekoratör türlerinin oluşturulmasını göstermiştir: sınıf, yöntem, özellik ve parametre.