І хоч в самій специфікації ECMAScript декоратори на стадії пропозиції та плану, їх вже можна спробувати завдяки TypeScript чи Babel.
Отож, що воно таке? Почнемо з маленьких аналогій. Якщо ви працювали з Python, то можливо вже зустрічали там декоратори, і там вони працюють десь з таким ж принципом. Або ж, можливо, ви вивчали патерни і зустрічали там однойменний структурний патерн. Мета декораторів - динамічно навішати певний функціонал. Стандартний приклад - вивести повідомлення перед початком виконання функції та після її завершення.
Синтаксис використання декораторів. Перед оголошенням класу, його методу чи властивості необхідно додати імʼя декоратора з префіксом @. Наприклад:
class Pokemon {
@log
attack() { }
}
Декоратори можуть створюватись динамічно, тому наступний синтаксис теж цілком можливий:
class Pokemon {
@log({ level: "debug" })
attack() { }
}
Як написати свої декоратори? Тут трохи більше деталей, тому ми думаємо, що краще використати документацію 🙂
Декоратори можна зустріти, наприклад, у NestJS, де зокрема з їх допомогою працює Dependency Injection.
Зверніть увагу, що в документації за посиланням нижче є банер з посиланням на статтю про декоратори із стадії 3.
👉 Відкрити документацію
👉 Відкрити статтю про патерн
#interview