深入理解 TypeScript Decorator 裝飾器
前言
我第一次在工作裡接觸到 Decorator,是團隊後端從 Koa 技術轉型到 Nest.js 的那段期間。剛開始使用 Nest.js 時,其實我完全不清楚 Decorator 的原理,大多都是文件怎麼寫,我就怎麼寫——這裡放 @Controller、那裡加 @Injectable,照著文件寫能跑起來再說。但這些東西在 TypeScript 裡究竟是怎麼運作?背後為什麼要這樣設計?我其實完全沒有概念,一直停留在「照著範例抄」的階段。
最近想花點時間把 Decorator 的底層原理釐清,所以整理了這份筆記。內容包含我如何理解 Decorator、為什麼會需要它、以及我自己在實作過程中觀察到的行為,希望能把這些想法整理成一篇清楚的文章。
什麼是 Decorator?
Decorator 的本質
我們可以把 Decorator 想成是:「在不改原本程式邏輯的前提下,替類別或方法貼上一些標籤(metadata),後續的程式碼或框架可以根據這些標籤做事」。這樣的方式可以把業務邏輯跟額外的關注點(像是日誌、權限、快取)分開來看,程式更好維護也比較乾淨。