TypeScript @Decorator: Потужна магічна паличка! 🪄

Що таке @Decorator ⚡

Декоратор — це спеціальна функція в TypeScript, яка використовується для модифікації класів, методів, властивостей або параметрів. Простими словами, це своєрідна "магічна паличка", яка додає додаткову потужність нашому коду! 🔮✨

🎭 Чому використовувати декоратори?

  • Зменшує повторення коду 🛑
  • Дозволяє писати чистий та зрозумілий код 📝
  • Полегшує впровадження логіки ⚡
  • Допомагає додавати метадані 📌

pic

🛠️ Як це працює? Для створення функції декоратора в TypeScript використовується символ @. Це фактично функція, яка може змінювати або розширювати цільовий елемент.

🔥 Простий приклад:

function Logger(constructor: Function) {  
 console.log(`Class Created: ${constructor.name}`);  
}  

@Logger  
class Person {  
 constructor() {  
 console.log("Person instance created!");  
 }  
}

✅ Тут @Logger працює як декоратор на класі Person. Кожного разу, коли клас Person буде ініціалізований, у консолі з'явиться лог.

💡 Типи декораторів

В TypeScript є п’ять типів декораторів:

1️⃣ Декоратор класу — працює з усім класом 🏛️

2️⃣ Декоратор методу — працює з певним методом ⚙️

3️⃣ Декоратор властивості — обробляє властивості 🏠

4️⃣ Декоратор параметра — впливає на параметри функції 🎯

5️⃣ Декоратор доступу — використовується для геттерів/сеттерів 🛠️

🎬 Приклад з реального життя:

Логування запитів до API. Припустимо, ми хочемо реєструвати кожен виклик API. Як це зробити? За допомогою декораторів! 😎

function LogRequest(target: any, methodName: string, descriptor: PropertyDescriptor) {  
 const originalMethod = descriptor.value;  
 descriptor.value = function(...args: any[]) {  
 console.log(`API Request Made: ${methodName}`);  
 return originalMethod.apply(this, args);  
 };  
}  
class APIService {  
 @LogRequest  
 fetchData() {  
 console.log("Fetching data from server...");  
 }  
}  
const api = new APIService();  
api.fetchData();

✅ Тут метод fetchData автоматично буде реєструватися кожного разу, коли його викликають! 🎉 🚀

Використання декораторів в NestJS:

NestJS — це фреймворк на основі TypeScript, де використання декораторів є досить поширеним. 📌 Використання декораторів @GET і @POST в NestJS:

import { Controller, Get, Post, Body } from '@nestjs/common';  
@Controller('users')  
export class UserController {  
 @Get()  
 getAllUsers() {  
 return ['User 1', 'User 2', 'User 3'];  
 }  
 @Post()  
 createUser(@Body() userData: { name: string }) {  
 return `User ${userData.name} created successfully!`;  
 }  
}

✅ Тут ми створили HTTP API, використовуючи декоратори @Get() і @Post(), які є чистими та простими.

🚀 Розширені декоратори:

Додавання метаданих. Декоратори також можуть використовуватися для зберігання метаданих, а не лише для модифікації методів або властивостей.

function AddMetadata(role: string) {  
 return function (target: any, key: string) {  
 Reflect.defineMetadata("role", role, target, key);  
 };  
}  

class User {  
 @AddMetadata("admin")  
 getUserInfo() {  
 return "User Info";  
 }  
}

✅ Тут ми додали метадані до методу getUserInfo! 🏷️

🎯 Заключні думки:

Декоратори TypeScript — це можливість зробити наш код більш динамічним, чистим та розумним. Вони потужні в розробці JavaScript і широко використовуються в основних фреймворках, таких як Angular, NestJS тощо. Як вам така магічна паличка? 😍

Чи будете ви використовувати декоратори у своєму наступному проекті? 🚀
NB: створено за допомогою ChatGPT ❤️

Перекладено з: TypeScript @Decorator: A Powerful Magic Wand! 🪄

Leave a Reply

Your email address will not be published. Required fields are marked *