WalzoneInterview Prep
📞 Interviewing soon? Practice with a realistic AI mock phone interview — it calls you, then scores you. First 15 min FREE →

Angular · Expert · question 71 of 100

How do you create and manage custom Angular decorators for metadata, properties, or methods?

📕 Buy this interview preparation book: 100 Angular questions & answers — PDF + EPUB for $5

Creating and managing custom Angular decorators involves three main steps: defining the decorator, applying it, and using it in your components, services, or classes. Let’s go through each step, including examples.

**1. Defining the decorator**

Decorators are basically functions that you define to handle specific metadata manipulation or add additional behavior to classes, properties, or methods. In Angular, there are four types of decorators: Class decorators, Property decorators, Method decorators, and Parameter decorators.

Here’s a brief explanation of each type:

- Class Decorators: applied to class itself.

- Property Decorators: applied to properties inside a class.

- Method Decorators: applied to methods inside a class.

- Parameter Decorators: applied to the parameters of a method.

To create a custom decorator, define a function with the appropriate parameters based on the type of decorator you’re creating. The following sections provide examples for each type of decorator.

**1.1. Class Decorator**

A class decorator takes one argument – the target constructor itself. Here’s an example of a simple custom class decorator that adds a static property to the target class:

function MyCustomDecorator(customProperty: string) {
  return function (target: any) {
    target.decoratorCustomProperty = customProperty;
  };
}

**1.2. Property Decorator**

A property decorator takes two arguments – the target object (or prototype) and the property key. Here’s an example of a custom property decorator:

function PropertyLogger(target: any, propertyKey: string) {
  console.log(`Property "${propertyKey}" has been defined in ${target.constructor.name} class.`);
}

**1.3. Method Decorator**

A method decorator takes three arguments – the target object (or prototype), the method key, and the method descriptor. Here’s an example of a custom method decorator:

function MethodLogger(target: any, propertyKey: string, descriptor: PropertyDescriptor) {
  const originalMethod = descriptor.value;

  descriptor.value = function (...args: any[]) {
    console.log(`Method "${propertyKey}" is called with arguments: ${JSON.stringify(args)}`);
    return originalMethod.apply(this, args);
  };
}

**1.4. Parameter Decorator**

A parameter decorator takes three arguments – the target object (or prototype), the method key, and the parameter index. Here’s an example of a custom parameter decorator:

function ParameterLogger(target: any, propertyKey: string, parameterIndex: number) {
  console.log(`Method "${propertyKey}" has a parameter at index ${parameterIndex} in ${target.constructor.name} class.`);
}

**2. Applying the decorator**

After defining the decorator, you need to apply it to a class, property, method, or parameter. Here’s how to apply each type of decorator:

**2.1. Applying Class Decorator**

@MyCustomDecorator("example")
class MyClass {
  // ...
}

**2.2. Applying Property Decorator**

class MyClass {
  @PropertyLogger
  public myProperty: string = "";
}

**2.3. Applying Method Decorator**

class MyClass {
  
  @MethodLogger
  public add(a: number, b: number): number {
    return a + b;
  }
}

**2.4. Applying Parameter Decorator**

class MyClass {
  
  public add(a: number, @ParameterLogger b: number): number {
    return a + b;
  }
}

**3. Using the decorator in your component/service/class**

Once you’ve applied the decorator, you can use it in your Angular component, service, or any other class. Here’s an example of using the custom ‘MyCustomDecorator‘ class decorator and the custom ‘PropertyLogger‘ property decorator in an Angular component:

import { Component } from "@angular/core";
import { MyCustomDecorator, PropertyLogger } from "./decorators";

@MyCustomDecorator("exampleClass")
@Component({
  selector: "app-example",
  templateUrl: "./example.component.html",
  styleUrls: ["./example.component.scss"]
})
export class ExampleComponent {

  @PropertyLogger
  public myProperty: string = "";

  constructor() {
    console.log("Decorator custom property:", (ExampleComponent as any).decoratorCustomProperty);
  }
}

That’s it! By following these steps, you can create and manage custom Angular decorators for metadata, properties, or methods.

Reading is step one. Saying it out loud is the interview. Our AI interviewer calls your phone and runs a realistic Angular interview — then scores it.
📞 Practice Angular — free 15 min
📕 Buy this interview preparation book: 100 Angular questions & answers — PDF + EPUB for $5

All 100 Angular questions · All topics