Cómo trabajar con decoradores de TypeScript en Angular

Los decoradores de TypeScript son un tipo especial de declaración que se puede adjuntar a una clase, método, descriptor de acceso, propiedad o parámetro. En Angular, los decoradores proporcionan una forma de agregar metadatos a las clases, lo que los hace muy eficaces para crear componentes reutilizables, servicios y más. Esta guía explica cómo trabajar con decoradores de TypeScript en Angular y proporciona ejemplos para ayudar a comprender mejor su uso.

¿Qué son los decoradores de TypeScript?

Los decoradores son funciones que modifican el comportamiento de una clase o de un miembro de una clase. En Angular, los decoradores se utilizan para definir componentes, directivas, tuberías y servicios inyectables. Proporcionan una forma declarativa de aplicar metadatos a una clase, que Angular utiliza para diversos fines, como crear instancias de componentes o inyectar dependencias.

Decoradores angulares comunes

Angular tiene varios decoradores integrados que se utilizan para distintos fines. A continuación, se muestran los decoradores más comunes de Angular:

  • @Component - Define un componente angular.
  • @Directive - Define una directiva Angular.
  • @Pipe - Define una tubería angular.
  • @Injectable - Define un servicio que puede inyectarse en otros componentes o servicios.
  • @Input - Decora una propiedad para convertirla en una entrada de enlace de datos.
  • @Output - Decora una propiedad para convertirla en una salida de enlace de eventos.

Uso del decorador @Component

El decorador @Component se utiliza para definir un componente Angular. Proporciona metadatos sobre el componente, como su selector, plantilla, estilos y otras configuraciones.

import { Component } from '@angular/core';

@Component({
  selector: 'app-hello-world',
  template: `<h1>Hello, World!</h1>`,
  styles: ['h1 { color: blue; }']
})
export class HelloWorldComponent { }

En este ejemplo, el decorador @Component define un componente simple con una plantilla que muestra "¡Hola, mundo!". El selector especifica la etiqueta HTML personalizada que se utilizará para este componente.

Usando el decorador @Injectable

El decorador @Injectable se utiliza para definir una clase de servicio que se puede inyectar en otros componentes o servicios. Es una parte esencial del sistema de inyección de dependencias de Angular.

import { Injectable } from '@angular/core';

@Injectable({
  providedIn: 'root'
})
export class DataService {
  getData() {
    return ['Angular', 'TypeScript', 'Decorators'];
  }
}

Aquí, el decorador @Injectable hace que DataService esté disponible para la inyección de dependencia en toda la aplicación.

Uso de los decoradores @Input y @Output

Los decoradores @Input y @Output se utilizan para crear propiedades de entrada y eventos de salida en componentes Angular. Se utilizan comúnmente para la comunicación de componentes.

import { Component, Input, Output, EventEmitter } from '@angular/core';

@Component({
  selector: 'app-child',
  template: `
    <p>{{ message }}</p>
    <button (click)="sendMessage()">Send Message</button>
  `
})
export class ChildComponent {
  @Input() message: string;
  @Output() messageEvent = new EventEmitter();

  sendMessage() {
    this.messageEvent.emit('Hello from Child Component!');
  }
}

En este ejemplo, el decorador @Input se utiliza para pasar datos de un componente principal a un componente secundario. El decorador @Output se utiliza para enviar datos del componente secundario de vuelta al componente principal a través de un evento.

Creación de decoradores personalizados

Se pueden crear decoradores personalizados en Angular para agregar comportamientos o metadatos específicos a clases, métodos o propiedades. A continuación, se muestra un ejemplo de un decorador de clase simple:

function LogClass(constructor: Function) {
  console.log('Class Decorator called:', constructor);
}

@LogClass
class MyService {
  constructor() {
    console.log('MyService created');
  }
}

Aquí, la función LogClass es un decorador personalizado que registra la clase en la consola cuando se define. Al aplicar @LogClass a MyService se registran los mensajes durante su creación.

Conclusión

Los decoradores en Angular brindan una forma poderosa de agregar metadatos y comportamiento a clases, métodos, propiedades y parámetros. Comprender cómo usar decoradores integrados como @Component, @Injectable, @Input y @Output es esencial para un desarrollo Angular efectivo. Además, se pueden crear decoradores personalizados para satisfacer necesidades específicas en una aplicación, lo que agrega flexibilidad al proceso de desarrollo.