0Pricing
TypeScript Academy · Lezione

Token di servizio type-safe

Utilizzi token tipizzati per evitare errori di risoluzione a runtime.

Token di servizio type-safe è una lezione TypeScript Academy gratuita su CoddyKit. Questa è la lezione 4 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.

Il problema dei token stringa

I token stringa come "Logger" sono facili da scrivere in modo errato e non contengono informazioni sui tipi. Il container non può indicare che get("Loggr") è errato e il tipo risolto è spesso any.

I simboli come token

Usare i simboli invece delle stringhe assegna a ogni token un'identità univoca, che non può entrare accidentalmente in conflitto con un'altra. Un registro centralizzato li mantiene organizzati.

const TYPES = {
  Logger: Symbol.for("Logger"),
  Mailer: Symbol.for("Mailer"),
} as const;

Associare i token ai tipi

L'obiettivo più importante è associare ogni token al tipo che risolve, così il container restituisce il tipo corretto invece di any. A questo scopo si costruisce un wrapper tipizzato per i token.

interface Token<T> {
  readonly id: symbol;
  readonly _type?: T; // phantom type marker
}

Creare token tipizzati

Un helper produce un token che conserva il proprio tipo in un campo phantom. Il campo non contiene mai un valore: trasporta soltanto informazioni sul tipo per il compilatore.

function token<T>(name: string): Token<T> {
  return { id: Symbol.for(name) };
}
const LoggerToken = token<Logger>("Logger");

Un'interfaccia tipizzata per il container

Si tipizza il container in modo che get inferisca il tipo risolto dal token. Nessun cast e nessun any.

interface TypedContainer {
  get<T>(t: Token<T>): T;
  bind<T>(t: Token<T>, impl: () => T): void;
}

Binding con tipi inferiti

Durante il binding, il tipo restituito dalla factory deve corrispondere al tipo del token. Le incompatibilità vengono rilevate in fase di compilazione.

declare const c: TypedContainer;
c.bind(LoggerToken, () => new ConsoleLogger());
// ConsoleLogger must satisfy Logger or this errors.

Risoluzione con tipi completi

Ora get restituisce esattamente il tipo del token. Il completamento automatico e il controllo dei tipi funzionano sul risultato senza annotazioni manuali.

const logger = c.get(LoggerToken); // type: Logger
logger.log("typed resolution");

Evitare errori di ricerca

Poiché i token sono valori tipizzati, un refuso fa riferimento a una variabile non definita, generando un errore di compilazione, invece di usare silenziosamente una stringa errata. Scompare così l'intera categoria di bug causati dalle chiavi stringa.

// c.get(LogerToken) -> compile error: LogerToken is not defined

L'equivalente in InversifyJS

Inversify supporta anche i token simbolo e gli helper della community aggiungono wrapper tipizzati. Il principio è identico: associare un token tipizzato a un'implementazione e risolverlo con il tipo corretto.

import { Container } from "inversify";
const TYPES = { Logger: Symbol.for("Logger") };
// container.bind<Logger>(TYPES.Logger).to(ConsoleLogger)

Un registro dei token

Centralizzare i token in un unico modulo offre una singola fonte di verità, rendendoli facili da trovare, rifattorizzare e mantenere coerenti in tutta la codebase.

export const TOKENS = {
  Logger: token<Logger>("Logger"),
  Mailer: token<Mailer>("Mailer"),
};

Riepilogo dei vantaggi

I token tipizzati offrono un'identità univoca (simboli), sicurezza in fase di compilazione (le incompatibilità vengono rifiutate), tipi risolti corretti (nessun any) e protezione dai refusi (errori per variabili non definite).

Verifica rapida

Verifica rapida di questa lezione.

Riepilogo

I token di servizio con sicurezza dei tipi racchiudono un symbol univoco insieme a un tipo phantom, associando ogni token al tipo che risolve. get restituisce il tipo preciso, il binding impone implementazioni compatibili e i refusi diventano errori di compilazione invece di bug silenziosi nelle ricerche tramite stringhe.

Domande Frequenti

La lezione «Token di servizio type-safe» è gratuita?

Sì — il testo completo di «Token di servizio type-safe» è 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 «Token di servizio type-safe»?

Utilizzi token tipizzati per evitare errori di risoluzione a runtime. 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 4 di 4.

Quanto tempo richiede la lezione «Token di servizio type-safe»?

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. Basi dell’inversione del controllo
  2. Dependency injection tramite costruttore
  3. Container DI con InversifyJS
  4. Token di servizio type-safe
← Torna a TypeScript Academy