TypeScript Academy · Lezione

Il tipo any e perché evitarlo

Comprenda any e quando vanifica lo scopo di TypeScript.

Lezione 2 di 413 passaggi

Il tipo any e perché evitarlo è 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.

Benvenuto

Il tipo `any` è una via di fuga dal sistema di tipi di TypeScript: disabilita tutti i controlli di tipo per una variabile. In questa lezione imparerà quando compare e perché è importante limitarne l'uso.

Che cosa fa any

Una variabile tipizzata come `any` può contenere qualsiasi valore e supporta qualsiasi operazione. TypeScript smette completamente di controllarla.
let x: any = 5;
x = 'hello';       // OK
x = true;          // OK
x.nonExistent();   // No error — but crashes at runtime!

Come any si propaga

Assegnare una variabile `any` a una variabile tipizzata contamina quest'ultima. `any` si propaga silenziosamente nel codice.
let data: any = fetchData();
let name: string = data.name; // name is now effectively any

Quando TypeScript deduce any

Se dichiara una variabile senza un valore iniziale e senza un'annotazione di tipo, TypeScript deduce `any`. Abiliti `noImplicitAny` per trasformare questa situazione in un errore di compilazione.
let value; // inferred as any — dangerous!
value = 42;
value = 'hello';

// Fix:
let value2: number;

Flag noImplicitAny

L'opzione del compilatore `noImplicitAny` (abilitata da `strict`) impone di annotare i tipi invece di ricorrere automaticamente a `any`.
// tsconfig.json
{ "compilerOptions": { "noImplicitAny": true } }

// Now this is an error:
function process(data) { } // Error: Parameter has implicit any type

Usi legittimi di any

A volte `any` è inevitabile: durante la migrazione da JavaScript, nella gestione di librerie di terze parti prive di tipi o quando si lavora con dati realmente dinamici. Lo utilizzi con parsimonia e solo localmente.
// Acceptable: narrow scope, clearly documented
function parseJson(raw: string): any {
  return JSON.parse(raw); // validate with Zod afterwards
}

Le asserzioni di tipo come alternativa

Invece di `any`, utilizzi le asserzioni di tipo (`as Type`) quando dispone di informazioni più precise rispetto al compilatore. È più sicuro perché si impegna a usare un tipo specifico.
const raw = JSON.parse(text) as { name: string; age: number };
console.log(raw.name); // typed correctly

any rispetto a object

Il tipo `object` accetta qualsiasi valore non primitivo, ma non consente l'accesso arbitrario alle proprietà, a differenza di `any`. Offre quindi un piccolo livello di sicurezza.
let o: object = { x: 1 };
// o.x; // Error — object doesn't allow property access

let a: any = { x: 1 };
a.x; // OK — but no safety

any disabilita il completamento automatico

Oltre a ridurre la sicurezza, l'uso di `any` disattiva il completamento automatico e la navigazione nell'IDE. Si perdono tutti i vantaggi degli strumenti forniti da TypeScript.

Sostituire any con unknown

Per i dati esterni che non controlla, preferisca `unknown`. Questo la obbliga a restringere il tipo prima di usare il valore, a differenza di `any`, che consente qualsiasi operazione.
let input: unknown = getInput();
// input.toUpperCase(); // Error — must narrow first
if (typeof input === 'string') {
  console.log(input.toUpperCase()); // OK
}

Il budget di any

Consideri `any` come un debito. Ogni utilizzo rende il codice meno sicuro. L'obiettivo dovrebbe essere avere zero tipi `any` nel codice di produzione. Utilizzi la regola @typescript-eslint/no-explicit-any di ESLint.

Verifica rapida

Quale opzione del compilatore fa sì che TypeScript segnali un errore quando una variabile ha un tipo `any` implicito?

Riepilogo

Il tipo `any` disabilita i controlli di tipo di TypeScript e si propaga nel codice. Abiliti noImplicitAny, sostituisca `any` con `unknown` per i dati esterni e utilizzi le asserzioni di tipo nei casi specifici.
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 «Il tipo any e perché evitarlo» è gratuita?

Sì — il testo completo di «Il tipo any e perché evitarlo» è 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 «Il tipo any e perché evitarlo»?

Comprenda any e quando vanifica lo scopo di TypeScript. 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 «Il tipo any e perché evitarlo»?

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. Tipi primitivi: string, number, boolean
  2. Il tipo any e perché evitarlo
  3. unknown vs any: la scelta più sicura
  4. null, undefined e controlli strict null
← Torna a TypeScript Academy