0Pricing
TypeScript Academy · Lezione

Perché esiste satisfies

Scopra quale lacuna colma satisfies tra annotazione e inferenza.

Perché esiste satisfies è una lezione TypeScript Academy gratuita su CoddyKit. Questa è la lezione 1 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.

I due obiettivi in conflitto

Quando si dichiara una configurazione, di solito si desiderano due cose: la validazione rispetto a una struttura nota e l'inferenza precisa dei valori letterali. Questi obiettivi spesso entrano in conflitto.

type Color = "red" | "green" | "blue";
// We want both: check the values AND remember exactly which ones.

L'annotazione perde il restringimento ai valori letterali

Aggiungere un'annotazione di tipo valida l'oggetto, ma amplia i tipi dei valori. Il compilatore dimentica i valori letterali esatti scritti.

type Config = { color: string; retries: number };
const cfg: Config = { color: "red", retries: 3 };
// cfg.color is string, not "red" anymore.
console.log(cfg.color.toUpperCase());

Perché l'ampliamento è un problema

Se color viene ampliato a string, si perde la possibilità di usarlo nei contesti che richiedono il valore letterale specifico, ad esempio per indicizzare un altro tipo.

const cfg = { color: "red" } as { color: string };
// const exact: "red" = cfg.color; // Error: string not assignable to "red"
console.log(cfg.color);

Senza annotazione si perde la validazione

Rimuovere l'annotazione mantiene un'inferenza precisa, ma elimina la rete di sicurezza. Gli errori di battitura e le strutture errate passano inosservati.

const cfg = { color: "rad", retries: 3 };
// No error on the typo "rad" because nothing validates it.
console.log(cfg.color);

La lacuna nella validazione

Senza un controllo, un valore non valido come un colore scritto in modo errato attraversa silenziosamente il programma e può causare un errore molto lontano dal punto in cui è stato commesso.

const palette = { primary: "blu" }; // typo, no error
console.log(palette.primary); // "blu"

Ecco l'operatore satisfies

L'operatore satisfies valida un'espressione rispetto a un tipo, preservando al contempo il tipo inferito preciso. Il meglio dei due approcci.

type Config = { color: string; retries: number };
const cfg = { color: "red", retries: 3 } satisfies Config;
console.log(cfg.color); // type is "red", value validated

satisfies mantiene i valori letterali

Dopo satisfies, cfg.color è ancora il valore letterale "red", non il tipo ampio string. L'inferenza viene preservata.

type Config = { color: string };
const cfg = { color: "red" } satisfies Config;
const exact: "red" = cfg.color; // OK
console.log(exact);

satisfies esegue comunque la validazione

Se l'oggetto non corrisponde al tipo, satisfies segnala un errore, proprio come farebbe un'annotazione.

type Config = { retries: number };
// const bad = { retries: "three" } satisfies Config; // Error
const good = { retries: 3 } satisfies Config;
console.log(good.retries);

L'esempio motivante

Si consideri una mappa di route in cui le chiavi devono essere route note e i valori sono nomi di gestori. Si desiderano il completamento automatico sulle chiavi E la validazione dei valori: è proprio ciò che offre satisfies.

type Routes = Record<string, { method: "GET" | "POST" }>;
const routes = {
  home: { method: "GET" },
  submit: { method: "POST" }
} satisfies Routes;
console.log(routes.home.method); // "GET" literal

Confronto tra i tre approcci

Annotazione: valida e amplia. Senza annotazione: precisa, ma non validata. satisfies: valida e mantiene la precisione. Per le configurazioni, il terzo approccio è il migliore.

type C = { color: string };
const a: C = { color: "red" };          // widened
const b = { color: "red" };             // unvalidated
const c = { color: "red" } satisfies C; // validated + precise
console.log(a.color, b.color, c.color);

Quando usare satisfies

Usi satisfies ogni volta che definisce un valore costante che deve conformarsi a un tipo, ma di cui desidera utilizzare in seguito anche il contenuto esatto.

type Sizes = Record<string, number>;
const sizes = { sm: 8, md: 16, lg: 24 } satisfies Sizes;
// keys "sm" | "md" | "lg" stay known for autocomplete
console.log(sizes.md);

Verifica rapida: perché satisfies

Verifichi di aver compreso perché esiste satisfies.

Riepilogo: perché esiste satisfies

Ha imparato che le annotazioni validano ma ampliano, che l'assenza di annotazione preserva la precisione ma non valida, e che satisfies offre validazione e inferenza precisa, l'ideale per gli oggetti di configurazione.

type C = { color: string };
const c = { color: "blue" } satisfies C;
const exact: "blue" = c.color;
console.log(exact);

Domande Frequenti

La lezione «Perché esiste satisfies» è gratuita?

Sì — il testo completo di «Perché esiste satisfies» è 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 «Perché esiste satisfies»?

Scopra quale lacuna colma satisfies tra annotazione e inferenza. 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 1 di 4.

Quanto tempo richiede la lezione «Perché esiste satisfies»?

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. Perché esiste satisfies
  2. satisfies e annotazione di tipo a confronto
  3. satisfies e asserzione as a confronto
  4. Pattern pratici con satisfies
← Torna a TypeScript Academy