TGViewer
Devs Hive Devs Hive @devshive · 1.41K subscribers
Post #99 607
Концепції TypeScript: Mixins vs Decorators

Думаю було б корисно почати створювати дописи і про TypeScript/JavaScript. Це звичайно не кодинг, а більш концептуальні теми, розуміння яких стало важливішим з приходом АІ.

Decorators
Фактично - це функція, яку можна прикріпити до класу, методу, параметра або поля за допомогою синтаксису @. Його задача додати або змінити поведінку конкретної сутності.

Наприклад, розберемо типовий метод контролера в Nest.js:
@Post()
@UseGuards(AuthGuard)
async createTrip() {}


Post()
- додає поведінку, яка вказує, що метод має обробляти HTTP POST запити.

UseGuards(AuthGuard) - додає поведінку, яка перевірить чи користувач авторизований, перед викликом цього метода.

Mixins
Вони теж дозволяють додавати поведінку, але працюють інакше, ніж decorators. Їхня основна задача - розширити клас через композицію (бо множинного наслідування немає).

Технічно - це функція, яка приймає клас і повертає новий клас з додатковими методами або полями.

Наприклад, в нас є бізнес логіка кешування (методи і поля), які спільні для всіх хто буде їх використовувати. Тоді логічно використати mixin, щоб розширити функціонал і паралельно не мати жорсткої завʼязки, як у випадку з наслідуванням.

class CachedTripsService extends WithCache(TripsService) {}

// В нас немає завʼязки з класом і при необхідності можна розширити його ще більше
Sentry(With)class CachedTripsService extends WithCache(TripsService) {}


Коли і що використовувати?

Тут все дуже просто, якщо потрібно розширити/змінити поведінку пробуєте використати decorators, в більшості випадків їх буде достатньо.

Якщо бачите, що вам потрібно створювати нові методи/поля, які будуть використовуватись в рамках класу, тоді створюєте mixin.
  • 👍 5
  • ❤ 2
More from @devshive
  1. Oct 7, 2026Post #289
  2. Oct 7, 2026Post #288
  3. Oct 6, 2026Цікаве оновлення в Nest.js 🔥 Вони випиляли Axios з HTTP клієнта і тепер використовують na…
  4. Oct 6, 2026Ще одне практичне застосування Jev - jevgrep 🤯☕️ Це інструмент для пошуку потрібного коду…
  5. Oct 5, 2026Post #285
  6. Oct 4, 2026Дуже багато відповіли, що Promise виконає обчислення в окремому потоці 🚬 Треба робити від…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →