TypeScript Academy · Lezione

Tipizzazione contestuale: inferenza dal contesto

Comprenda come TypeScript inferisce i tipi dal contesto circostante.

Lezione 2 di 413 passaggi

Tipizzazione contestuale: inferenza dal contesto è 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.

Che cos'è la tipizzazione contestuale?

La tipizzazione contestuale si verifica quando TypeScript deduce il tipo di un'espressione in base alla posizione in cui compare: è il contesto a fornire il tipo, non il valore in sé.

document.addEventListener("click", (e) => {
  // e is inferred as MouseEvent from the event type
  console.log(e.clientX);
});

Tipizzazione contestuale nei callback

Quando passa un callback a una funzione tipizzata, TypeScript deduce i tipi dei parametri dalla firma del callback prevista.

const nums = [1, 2, 3];
nums.forEach((n) => {
  // n inferred as number from Array<number>
  console.log(n.toFixed(2));
});

Tipizzazione contestuale e literal di oggetti

Quando un literal di oggetto viene assegnato a una variabile tipizzata, i tipi delle sue proprietà vengono dedotti da quel tipo, consentendo controlli precisi.

interface Config { timeout: number; retries: number; }
const config: Config = {
  timeout: 3000,
  retries: 3,
  // extra: true // Error: excess property
};

Tipizzazione contestuale in JSX

In React, le proprietà dei gestori di eventi vengono tipizzate contestualmente, quindi i tipi dei parametri degli eventi vengono dedotti automaticamente.

function Button({ onClick }: { onClick: (e: React.MouseEvent) => void }) {
  return <button onClick={onClick}>Click</button>;
}
// Caller: e is inferred as React.MouseEvent
<Button onClick={(e) => console.log(e.currentTarget)} />

Tipizzazione contestuale e annotazioni esplicite

La tipizzazione contestuale è potente, ma può essere sovrascritta da annotazioni esplicite. Quando sono presenti entrambe, l'annotazione esplicita ha la precedenza su quella contestuale.

const handler: (x: string) => void = (x: number) => {}; // Error
// Explicit annotation (number) conflicts with contextual (string)

Tipizzazione contestuale con la destrutturazione

Anche i parametri destrutturati nelle funzioni tipizzate contestualmente ereditano i propri tipi dal contesto.

const pairs: [string, number][] = [["a", 1]];
pairs.forEach(([key, value]) => {
  // key: string, value: number — contextually typed
  console.log(key.toUpperCase(), value * 2);
});

Tipizzazione contestuale e tipi restituiti

Quando una funzione viene assegnata a una variabile tipizzata, anche il tipo restituito viene dedotto contestualmente.

type Transform = (x: number) => string;
const double: Transform = (x) => x * 2; // Error: number not string
const str: Transform = (x) => String(x * 2); // OK

Tipizzazione contestuale nelle espressioni condizionali

TypeScript può propagare i tipi contestuali nelle espressioni ternarie e negli operatori logici.

const result: string | null =
  Math.random() > 0.5 ? "yes" : null; // both arms typed by context

Limiti della tipizzazione contestuale

La tipizzazione contestuale non si applica quando l'espressione si trova in una posizione non contestuale, ad esempio una variabile autonoma senza annotazione.

const fn = (x) => x + 1; // x: any — no context to infer from
// Add annotation: const fn = (x: number) => x + 1;

Inferenza bidirezionale

TypeScript esegue un'inferenza dei tipi bidirezionale: dall'alto verso il basso, tramite il contesto, e dal basso verso l'alto, a partire dall'espressione. I due approcci collaborano per fornire il tipo più accurato possibile.

function apply<T>(fn: (x: T) => T, val: T): T { return fn(val); }
apply((x) => x.toUpperCase(), "hello"); // x inferred as string

Riepilogo: tipizzazione contestuale

La tipizzazione contestuale consente a TypeScript di dedurre i tipi dalla posizione in cui viene utilizzata un'espressione: callback, assegnazioni, proprietà JSX e destrutturazione traggono tutti vantaggio da questo meccanismo di inferenza.

Verifica rapida

Quando si applica la tipizzazione contestuale a un parametro di un callback?

Che cosa ha imparato

La tipizzazione contestuale consiste nell'inferire i tipi dalla posizione anziché dal valore. Rende concisi e al tempo stesso type-safe i callback, i gestori di eventi e le assegnazioni tipizzate.

Gratis per iniziare

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 «Tipizzazione contestuale: inferenza dal contesto» è gratuita?

Sì — il testo completo di «Tipizzazione contestuale: inferenza dal contesto» è 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 «Tipizzazione contestuale: inferenza dal contesto»?

Comprenda come TypeScript inferisce i tipi dal contesto circostante. 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 «Tipizzazione contestuale: inferenza dal contesto»?

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. Meccanismi di widening e narrowing dei tipi
  2. Tipizzazione contestuale: inferenza dal contesto
  3. Freshness e controllo delle proprietà in eccesso
  4. Asserzioni const e as const
← Torna a TypeScript Academy