Cos'è TypeScript e cosa aggiunge a JavaScript

TypeScript è un superset di JavaScript — ogni file JavaScript valido è anche TypeScript valido. La differenza principale è un sistema di tipi statici: puoi dichiarare esplicitamente il tipo delle variabili, dei parametri delle funzioni, e dei valori di ritorno, e il compilatore verifica che il codice rispetti quelle dichiarazioni prima ancora di eseguirlo.

function somma(a: number, b: number): number {
    return a + b
}

somma(1, 2)
somma(1, "due")

L'ultima riga produce un errore a compile time — non a runtime, non in produzione, non dopo che l'utente ha già visto qualcosa di sbagliato. Il compilatore ti avvisa prima.

TypeScript non cambia come JavaScript funziona nel browser o in Node.js — viene compilato in JavaScript standard e sparisce a runtime. Quello che aggiunge è un layer di verifica statica durante lo sviluppo.

TypeScript nel 2026: vale la pena anche per progetti piccoli?

TypeScript vs JavaScript: le differenze concrete

La differenza non è solo sintattica. Cambia il modo in cui scrivi e mantieni il codice.

Errori a compile time invece che a runtime

In JavaScript, molti errori emergono solo quando il codice viene eseguito — spesso in produzione, spesso da un utente. TypeScript sposta quella verifica prima: l'editor ti sottolinea il problema mentre scrivi, non dopo il deploy.

Autocompletamento intelligente

Con i tipi dichiarati, l'editor sa esattamente cosa contiene un oggetto e quali metodi ha. L'autocompletamento diventa preciso e contestuale — non suggerisce tutte le proprietà possibili, suggerisce quelle che esistono davvero su quell'oggetto specifico. Su progetti con molte API o strutture dati complesse, questo da solo vale il costo di adozione.

Refactoring sicuro

Rinominare una funzione o cambiare la firma di un metodo in JavaScript richiede di trovare manualmente tutti i punti in cui viene usato. In TypeScript, il compilatore ti dice immediatamente quali file smettono di compilare — e l'IDE può rinominare tutto automaticamente con certezza che non rompe nulla di nascosto.

Documentazione vivente

I tipi sono documentazione che non può diventare obsoleta — se il codice cambia, i tipi devono cambiare con lui o non compila. Un'interfaccia TypeScript descrive esattamente la forma di un oggetto, e quella descrizione è sempre aggiornata per definizione.

I vantaggi reali su progetti piccoli

Qui c'è il malinteso più comune: TypeScript viene percepito come uno strumento per team grandi, con basi di codice enormi, dove la comunicazione tra sviluppatori richiede contratti espliciti.

Non è così. I vantaggi emergono anche su progetti piccoli — e in certi casi proprio lì sono più evidenti.

Un progetto piccolo mantenuto da una persona sola ha un problema specifico: la memoria. Tra sei mesi non ricordi come era fatta quella funzione, cosa si aspettava come input, cosa restituiva. I tipi sono la nota che ti lasci — e che non puoi dimenticare di aggiornare.

Un progetto piccolo che cresce ha un altro problema: il refactoring. Aggiungere una feature su codice non tipizzato richiede di capire ogni pezzo prima di toccarlo. Con TypeScript, il compilatore fa quella verifica al posto tuo — ti dice cosa rompe e dove.

Il momento in cui TypeScript paga di meno è il prototipo usa-e-getta che non diventerà mai produzione. Se sai con certezza che il codice vivrà pochi giorni, il costo di setup supera il beneficio. Per tutto il resto, il bilancio è positivo prima di quanto si pensi.

Gli svantaggi onesti

TypeScript non è gratis. Vale la pena essere chiari su cosa costa.

La configurazione iniziale

tsconfig.json ha decine di opzioni, e le configurazioni online si contraddicono. Per chi parte da zero, capire cosa abilitare e cosa no richiede tempo. La buona notizia è che framework come Next.js e Vite lo configurano automaticamente — se usi questi strumenti, il problema è già risolto.

La curva di apprendimento dei tipi generici

I tipi semplici (string, number, boolean) si imparano in un'ora. I generici — Array, Promise, i tipi condizionali — richiedono più tempo. Non è necessario padroneggiare tutto subito, ma prima o poi ci si scontra con un tipo complesso che non si capisce come scrivere.

Il "type gymnastics"

A volte si finisce a scrivere tipi molto complessi per soddisfare il compilatore, quando la soluzione più semplice sarebbe as any. Cedere troppo spesso a as any nega i benefici di TypeScript. Resistere richiede disciplina e conoscenza.

La compilation step

TypeScript deve essere compilato prima di essere eseguito. Nella maggior parte dei workflow moderni questo è trasparente (Vite, Next.js, tsx), ma aggiunge un passaggio al processo di sviluppo.

Come iniziare senza riscrivere tutto da zero

La cosa migliore di TypeScript è che puoi adottarlo gradualmente — non serve riscrivere nulla.

Su un progetto nuovo

Parti direttamente con TypeScript. Se usi Next.js, è già configurato con create-next-app. Per altri progetti, npm install -D typescript @types/node e un tsconfig.json base sono sufficienti per iniziare.

Su un progetto JavaScript esistente

Rinomina i file da .js a .ts uno alla volta. Inizia con i moduli più stabili e meno critici. Aggiungi "strict": false nel tsconfig.json inizialmente — ti permette di adottare TypeScript senza dover tipizzare tutto subito. Alza gradualmente la severità man mano che il codice viene tipizzato.

La strategia dei tipi progressivi

Inizia con i tipi espliciti solo sulle funzioni pubbliche — input e output. L'interno può restare con type inference automatica. Aggiungi le interfacce per le strutture dati principali. Affronta i generici solo quando servono davvero.

TypeScript e Next.js: già integrati

Se stai già usando Next.js — come nel caso di ekulos.com — TypeScript è già lì. create-next-app lo configura di default, e tutto il framework è scritto in TypeScript con tipi completi.

I componenti React in TypeScript definiscono esplicitamente le props:

interface ArticleCardProps {
    title: string
    date: string
    category: string
    readTime: number
    slug: string
}

export default function ArticleCard({ title, date, category, readTime, slug }: ArticleCardProps) {
    return (
        <article>
            <h2>{title}</h2>
            <span>{category} · {readTime} min</span>
        </article>
    )
}

Se passi una prop sbagliata — un numero dove si aspetta una stringa, una prop mancante — il compilatore te lo dice prima che il componente venga renderizzato. Su un blog con molti componenti e molte pagine, questo tipo di verifica evita una categoria intera di bug.

Vale la pena nel 2026?

Sì — con una condizione: se il progetto durerà più di qualche settimana.

Il costo di adozione di TypeScript si è ridotto enormemente negli ultimi anni. I framework moderni lo includono per default, l'editor lo supporta nativamente, e la community ha prodotto tipi per quasi ogni libreria JavaScript esistente tramite DefinitelyTyped.

Il beneficio — errori trovati prima, refactoring sicuro, documentazione sempre aggiornata — emerge rapidamente, anche su progetti piccoli. Non è uno strumento solo per team grandi. È uno strumento per codice che deve sopravvivere nel tempo.