Meccanismi di widening e narrowing dei tipi
Scopra come TypeScript amplia i tipi e quando impedirlo.
Meccanismi di widening e narrowing dei tipi è 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.
Che cos'è il widening dei tipi?
Il widening dei tipi si verifica quando TypeScript deduce un tipo più ampio di quello specificato. L'assegnazione let x = "hello" viene ampliata a string, non mantiene il tipo letterale "hello".
let x = "hello"; // inferred: string, not "hello"
let y = 42; // inferred: number, not 42Widening con let e const
Le variabili dichiarate con const mantengono il tipo letterale perché non possono essere riassegnate. let viene ampliato al tipo di base.
const a = "world"; // type: "world"
let b = "world"; // type: stringPrevenire il widening con le annotazioni di tipo
L'annotazione esplicita di una variabile let impedisce il widening e fissa il tipo letterale.
let direction: "left" | "right" = "left";
// direction = "up"; // Error: not assignableNarrowing con typeof
TypeScript restringe un tipo unione all'interno dei controlli typeof, fornendo un tipo preciso all'interno di quel ramo.
function format(val: string | number) {
if (typeof val === "string") {
return val.toUpperCase(); // val: string here
}
return val.toFixed(2); // val: number here
}Narrowing con i controlli di uguaglianza
Anche i controlli di uguaglianza con valori letterali restringono il tipo all'interno del ramo.
type Direction = "left" | "right" | "up";
function handle(dir: Direction) {
if (dir === "left") {
console.log("Going left"); // dir: "left"
}
}Analisi del flusso di controllo
TypeScript tiene traccia delle assegnazioni attraverso il flusso di controllo e restringe il tipo dopo ogni ramo.
function process(x: string | null) {
if (x === null) return;
// x is string here — TypeScript knows null is ruled out
console.log(x.length);
}Widening nei literal di oggetti
Anche i valori delle proprietà dei literal di oggetti vengono ampliati, a meno che non utilizzi as const.
const config = { mode: "dark" };
// config.mode: string (widened)
const config2 = { mode: "dark" } as const;
// config2.mode: "dark" (literal)Freshness e widening
Quando assegna direttamente un literal di oggetto a una variabile tipizzata, TypeScript applica il controllo delle proprietà in eccesso; dopo l'ampliamento a una variabile con nome, però, il controllo non viene più applicato.
interface Options { timeout: number; }
const opts = { timeout: 3000, retry: true };
// No error — widened type, excess property check skipped
const o: Options = opts;Narrowing con l'operatore in
L'operatore in restringe i tipi unione di oggetti verificando se esiste una proprietà.
type Cat = { meow(): void };
type Dog = { bark(): void };
function speak(animal: Cat | Dog) {
if ("meow" in animal) animal.meow();
else animal.bark();
}Narrowing con le funzioni di asserzione
Le funzioni di asserzione utilizzano i tipi restituiti asserts condition per restringere il tipo dopo la chiamata.
function assertString(val: unknown): asserts val is string {
if (typeof val !== "string") throw new Error("Expected string");
}
const x: unknown = "hi";
assertString(x);
x.toUpperCase(); // OK — narrowed to stringRiepilogo: widening e narrowing
Il widening amplia i tipi dedotti per offrire maggiore flessibilità; il narrowing perfeziona un tipo ampio trasformandolo in uno preciso all'interno di un ramo condizionale. Comprendere entrambi aiuta a scrivere codice TypeScript più sicuro.
Verifica rapida
Quale dichiarazione impedisce l'ampliamento al tipo di base?
Che cosa ha imparato
Ora comprende il widening dei tipi, cioè il modo in cui TypeScript amplia i tipi dedotti, e il narrowing, cioè il modo in cui i controlli condizionali producono tipi precisi. Utilizzi as const per impedire il widening e i controlli del flusso di controllo per restringere le unioni in modo sicuro.
Impara TypeScript con un tutor IA — gratis
Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.
- Corsi
- 101
- Lezioni
- 352
Domande Frequenti
La lezione «Meccanismi di widening e narrowing dei tipi» è gratuita?
Sì — il testo completo di «Meccanismi di widening e narrowing dei tipi» è 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 «Meccanismi di widening e narrowing dei tipi»?
Scopra come TypeScript amplia i tipi e quando impedirlo. 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 «Meccanismi di widening e narrowing dei tipi»?
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
- Meccanismi di widening e narrowing dei tipi
- Tipizzazione contestuale: inferenza dal contesto
- Freshness e controllo delle proprietà in eccesso
- Asserzioni const e as const