A decorator एक विशेष घोषणा (@name) आहे जी वर्ग, पद्धति, गुणधर्म किंवा पैरामीटरला वर्तन किंवा मेटाडेटा जोडते. हे एक फंक्शन आहे जो runtime सजावटीकृत लक्ष्यासह कॉल करतो, जो आपल्याला घोषणात्मक पद्धतीने लपेटू किंवा टीप लावू देतो.
// A simple method decorator that logs calls
function log(target: any, key: string, desc: PropertyDescriptor) {
const original = desc.value;
desc.value = function (...args: any[]) { // wrap the original method
console.log(`calling ${key} with`, args);
return original.apply(this, args);
};
}
class Service {
@log
fetch(id: number) { return { id }; }
}
new Service().fetch(1); // logs "calling fetch with [1]" then runs
डेकोरेटरने पद्धति वर्णनकर्ता प्राप्त केला आणि त्याला एक wrapper ने बदलले — क्रॉस-कटिंग वर्तन (logging, caching, timing) पद्धती शरीरला स्पर्श न करता.
जिथे तुम्हाला सर्वाधिक दिसतात: frameworks
@Controller("users") // NestJS — declares a route controller
export class UsersController {
@Get(":id") // maps GET /users/:id
findOne(@Param("id") id: string) { return id; } // param decorator injects the route param
}
@Entity() // TypeORM — maps a class to a DB table
class User { @Column() name: string; }
NestJS, Angular, TypeORM आणि class-validator DI, routing, ORM mapping आणि validation साठी डेकोरेटर्सभोवती तयार केलेले आहेत.
दोन फ्लेव्हर्स (महत्वाचे)
{ "experimentalDecorators": true, "emitDecoratorMetadata": true }
legacy (experimental) डेकोरेटर्स वरील असे आहेत जर्यावर Nest/Angular/TypeORM आज अवलंबून आहेत. TC39 Stage-3 dekoratoriai (TS 5+) देखील आहेत ज्यांचे वेगवेगळे स्वाक्षर आहे, जे भविष्यातील मानक आहेत — परंतु बहुतांश विद्यमान frameworks अजूनही legacy फॉर्म वापरतात.
हे का महत्वाचे आहे
डेकोरेटर्स स्वच्छ, घोषणात्मक meta-programming सक्षम करतात — server frameworks आणि ORMs ची मूळव्याप.
यंत्रणा (एक फंक्शन जो लक्ष्य लपेटतो) आणि legacy-versus-standard विभाजन दोन्ही जाणून घेणे NestJS/Angular इकोसिस्टममध्ये काम करण्यासाठी आवश्यक आहे.
