satisfies e annotazione di tipo a confronto
Mantenga l’inferenza dei literal continuando a validare la struttura.
satisfies e annotazione di tipo a confronto è una lezione TypeScript Academy gratuita su CoddyKit. Questa è la lezione 2 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 modello dell'annotazione
Il modello classico const config: Type = {...} valida l'oggetto, ma il tipo della variabile diventa Type, ampliando tutti i valori letterali al suo interno.
type Config = { mode: string; level: number };
const config: Config = { mode: "dark", level: 5 };
// config.mode has type string
console.log(config.mode);Come si manifesta l'ampliamento
Con l'annotazione, config.mode è di tipo string. Non è possibile assegnarlo a una variabile che si aspetta il valore letterale "dark".
type Config = { mode: string };
const config: Config = { mode: "dark" };
// const m: "dark" = config.mode; // Error: string not assignable to "dark"
console.log(config.mode);Il modello satisfies
Con const config = {...} satisfies Type, la variabile conserva il proprio tipo inferito esatto, pur continuando a essere verificata rispetto a Type.
type Config = { mode: string; level: number };
const config = { mode: "dark", level: 5 } satisfies Config;
// config.mode has type "dark"
console.log(config.mode);L'inferenza precisa viene preservata
Ora config.mode è il valore letterale "dark", quindi funziona ovunque sia richiesto il tipo più ristretto.
type Config = { mode: string };
const config = { mode: "dark" } satisfies Config;
const m: "dark" = config.mode; // OK
console.log(m);Entrambi validano comunque
Entrambi i modelli rifiutano gli oggetti non validi. La differenza riguarda esclusivamente il tipo risultante della variabile, non il fatto che la validazione venga eseguita.
type Config = { level: number };
// const a: Config = { level: "x" }; // Error
// const b = { level: "x" } satisfies Config; // Error
const ok = { level: 3 } satisfies Config;
console.log(ok.level);Le proprietà aggiuntive vengono rilevate
Come le annotazioni, satisfies segnala le proprietà in eccesso che non appartengono al tipo di destinazione, aiutando a rilevare gli errori di battitura nelle chiavi.
type Config = { mode: string };
// const c = { mode: "dark", extar: true } satisfies Config; // Error: extar
const c = { mode: "dark" } satisfies Config;
console.log(c.mode);Preservare la natura di tupla
satisfies aiuta anche gli array a mantenere una precisione simile a quella delle tuple quando viene combinato con as const, continuando al contempo a validare i tipi degli elementi.
type Nums = readonly number[];
const xs = [1, 2, 3] as const satisfies Nums;
// xs is a readonly tuple [1, 2, 3], validated as numbers
console.log(xs.length);L'annotazione amplia i membri dell'unione
Se un campo è un'unione come "a" | "b", un'annotazione tipizzata come l'unione lo mantiene un'unione, mentre un tipo di campo più ampio lo amplia. satisfies fissa il membro esatto.
type Config = { tier: string };
const withAnn: Config = { tier: "pro" }; // tier: string
const withSat = { tier: "pro" } satisfies Config; // tier: "pro"
console.log(withAnn.tier, withSat.tier);Mantenere il completamento automatico nelle letture
Poiché satisfies preserva le chiavi e i valori letterali, gli editor possono offrire il completamento automatico basandosi sull'oggetto esatto, non sul tipo dichiarato più ampio.
type Theme = Record<string, string>;
const theme = { bg: "black", fg: "white" } satisfies Theme;
// theme.<autocomplete shows bg and fg>
console.log(theme.bg, theme.fg);Scegliere tra i due approcci
Usi una semplice annotazione quando desidera davvero il tipo più ampio. Usi satisfies quando desidera la validazione, ma ha anche bisogno della struttura inferita precisa in seguito.
type Config = { mode: string };
// Want wide type for reassignment flexibility -> annotation
let a: Config = { mode: "dark" };
// Want exact literals for later indexing -> satisfies
const b = { mode: "dark" } satisfies Config;
console.log(a.mode, b.mode);Riepilogo a confronto
L'annotazione amplia; satisfies preserva. Entrambi validano. Per le configurazioni immutabili da cui si leggono dati, satisfies è solitamente la scelta predefinita migliore.
type C = { color: string; size: number };
const widened: C = { color: "red", size: 1 };
const exact = { color: "red", size: 1 } satisfies C;
console.log(widened.color, exact.color);Verifica rapida: satisfies e annotazione
Verifichi di aver compreso la differenza.
Riepilogo: satisfies e annotazione di tipo
Un'annotazione di tipo valida, ma amplia i valori letterali trasformandoli nei rispettivi tipi di base. L'operatore satisfies valida e mantiene l'inferenza esatta, preservando i valori letterali, le chiavi e la precisione delle tuple.
type C = { mode: string };
const c = { mode: "dark" } satisfies C;
const exact: "dark" = c.mode;
console.log(exact);Domande Frequenti
La lezione «satisfies e annotazione di tipo a confronto» è gratuita?
Sì — il testo completo di «satisfies e annotazione di tipo a confronto» è 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 «satisfies e annotazione di tipo a confronto»?
Mantenga l’inferenza dei literal continuando a validare la struttura. 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 2 di 4.
Quanto tempo richiede la lezione «satisfies e annotazione di tipo a confronto»?
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
- Perché esiste satisfies
- satisfies e annotazione di tipo a confronto
- satisfies e asserzione as a confronto
- Pattern pratici con satisfies