Using TypeScript Decorators to Add Functionality to Existing Classes

TypeScript decorators provide a way for developers to add new functionality to existing classes and class members. This can help make code more flexible and easier to maintain.

To use decorators in TypeScript, you need to enable the experimental decorators feature by setting the experimentalDecorators option in the tsconfig.json file to true. This will allow the TypeScript compiler to recognize and process decorators when it compiles your code.

Here is an example of how to use a decorator to add a new property to a class:

// Use the @decoratorName syntax to apply the decorator to the class
@addGender
class Person {
name: string;
age: number;
}
// The addGender decorator function
function addGender(target: any) {
target.prototype.gender = 'unknown';
}

In this example, we've implemented the addGender decorator and applied to the Person class. This decorator function adds a new gender property to the Person class, with a default value of unknown.

Decorators can also be used to modify existing class members, such as methods. For example:

class Person {
name: string;
age: number;
// Use the @decoratorName syntax to apply the decorator to the method
@logMethod
sayHello() {
console.log(`Hello, my name is ${this.name}!`);
}
}
// The logMethod decorator function
function logMethod(target: any, key: string, descriptor: PropertyDescriptor) {
const originalMethod = descriptor.value;
descriptor.value = function(...args: any[]) {
console.log(`Executing ${key} method...`);
return originalMethod.apply(this, args);
}
}

In this example, we've defined the logMethod decorator and applied to the sayHello method. This decorator function adds new behavior to the sayHello method, logging its execution to the console.

In conclusion, TypeScript decorators provide a useful way for developers to add new behavior to existing classes and class members in a declarative way. This can help make code more flexible and maintainable.


December 06, 2022
24