0Pricing
TypeScript Academy · Lezione

Decorator per parametri e metadati

Utilizzi i decorator per parametri con reflect-metadata.

Decorator per parametri e metadati è una lezione TypeScript Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento TypeScript Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso TypeScript Academy include 4 lezioni in totale.

Benvenuto

Questa lezione tratta i decoratori di parametro e i metadati in TypeScript.

Introduzione

I decoratori sono una proposta JavaScript di fase 3 e una funzionalità sperimentale di TypeScript per aggiungere metadati e modificare classi e relativi membri.

Concetto fondamentale

Un decoratore è una funzione applicata a una classe, a un metodo, a una proprietà o a un parametro utilizzando la sintassi @.
@sealed
class BugReport {
  type = 'report';
  title: string;
  constructor(t: string) { this.title = t; }
}

Decoratore di classe

I decoratori di classe ricevono la funzione costruttrice e possono restituirne una versione modificata.
function sealed(constructor: Function) {
  Object.seal(constructor);
  Object.seal(constructor.prototype);
}

Decoratore di metodo

I decoratori di metodo ricevono il target, il nome della proprietà e il descrittore della proprietà.
function log(target: any, key: string, desc: PropertyDescriptor) {
  const orig = desc.value;
  desc.value = function(...args: any[]) {
    console.log('Calling', key);
    return orig.apply(this, args);
  };
}

Decoratore di proprietà

I decoratori di proprietà ricevono il target e la chiave della proprietà. Non possono intercettare direttamente le letture e le scritture.
function readonly(target: any, key: string) {
  Object.defineProperty(target, key, { writable: false });
}

Decoratore di parametro

I decoratori di parametro ricevono il target, il nome del metodo e l'indice del parametro.
function required(target: any, key: string, index: number) {
  const meta = Reflect.getMetadata('required', target, key) || [];
  meta.push(index);
  Reflect.defineMetadata('required', meta, target, key);
}

Factory di decoratori

Una factory di decoratori è una funzione che restituisce un decoratore. Accetta parametri di configurazione.
function role(name: string) {
  return function(target: any, key: string) {
    Reflect.defineMetadata('role', name, target, key);
  };
}

class UserController {
  @role('admin')
  deleteUser() {}
}

Decoratori NestJS

NestJS utilizza ampiamente i decoratori per i controller, l'iniezione delle dipendenze e il routing.
@Controller('users')
class UsersController {
  constructor(private usersService: UsersService) {}

  @Get()
  findAll(): User[] {
    return this.usersService.findAll();
  }
}

reflect-metadata

I decoratori lavorano spesso con il polyfill reflect-metadata per archiviare e recuperare metadati in fase di esecuzione.
import 'reflect-metadata';
// Enable in tsconfig: experimentalDecorators: true, emitDecoratorMetadata: true

Ordine dei decoratori

Più decoratori sulla stessa dichiarazione vengono applicati dal basso verso l'alto (l'ultimo scritto viene valutato per primo).
@first
@second
class Example {}
// Applied: second first, then first

Verifica rapida

Quale configurazione di TypeScript è necessaria per utilizzare i decoratori?

Riepilogo

I decoratori utilizzano la sintassi @ per modificare classi, metodi, proprietà e parametri. Sono abilitati con experimentalDecorators in tsconfig e ampiamente utilizzati da framework come NestJS e Angular.

Domande Frequenti

La lezione «Decorator per parametri e metadati» è gratuita?

Sì — il testo completo di «Decorator per parametri e metadati» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso TypeScript Academy, passa a CoddyKit PRO. Il corso TypeScript Academy include 4 lezioni in totale.

Cosa imparerò in «Decorator per parametri e metadati»?

Utilizzi i decorator per parametri con reflect-metadata. Eserciti TypeScript Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare TypeScript Academy?

Non è richiesta alcuna esperienza precedente. TypeScript Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.

Quanto tempo richiede la lezione «Decorator per parametri e metadati»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione TypeScript Academy?

Sì. Ogni lezione TypeScript Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Decorator per classi: incapsulare il comportamento
  2. Decorator per metodi e proprietà
  3. Decorator per parametri e metadati
  4. Decorator nei framework: esempio con NestJS
← Torna a TypeScript Academy