React

TypeScript o JavaScript per la UI: cosa cambia davvero

TypeScript non rende automaticamente migliore una UI. Serve dove i confini sono ambigui: props, varianti, token e dati che arrivano da un catalogo. Ecco dove conviene e dove no.

In sintesi

  • Il valore di TypeScript è nei confini, non nel numero di tipi scritti.
  • Una API di componenti tipizzata bene riduce le varianti impossibili più di qualsiasi test visivo.
  • JavaScript resta ragionevole per script, prototipi e file di configurazione.

La domanda “TypeScript o JavaScript?” nasce quasi sempre da un progetto già avviato. La risposta utile è: dove il tipo previene un errore che il test non vede? Il resto è preferenza.

Dove TypeScript paga

ConfineErrore che previeneEsempio
Props di un componenteValori non previsti`variant: "ghost" | "solid"`
Dati da APICampi assenti o rinominatiRisposta del catalogo
Token di designNomi inesistenti`--ui-surface` vs `--ui-surf`
Registry itemFile e dipendenze mancantiInstallazione incompleta
Eventi e refTipo sbagliato a runtime`HTMLButtonElement`

Dove TypeScript costa

  • Componenti polimorfici: i generics diventano difficili da leggere prima di essere utili.
  • Migrazioni parziali: i `any` impliciti spostano il problema senza risolverlo.
  • Tempo di build e configurazione, se il progetto è piccolo.
  • Tipi scritti a mano per dati che cambiano spesso: meglio generarli.

Una API tipizzata che vale la pena

type Variant = "solid" | "outline" | "ghost";
type Size = "sm" | "md" | "lg";

type ButtonProps = {
  variant?: Variant;
  size?: Size;
  loading?: boolean;
} & React.ButtonHTMLAttributes;

export function Button({ variant = "solid", size = "md", ...props }: ButtonProps) {
  return ;
}

Questo tipo impedisce tre errori che nessun test visivo intercetta: una variante inesistente, una taglia inventata, un attributo che il bottone non supporta.

La migrazione incrementale che funziona

  • Attiva `strict` dal primo giorno sui file nuovi, non su tutto il progetto.
  • Tipizza prima i confini: props pubbliche, risposte API, funzioni esportate.
  • Genera i tipi dai dati reali invece di scriverli a mano.
  • Non convertire i file solo per aggiungere un tipo: converti quando tocchi il file per un motivo.

Il test che decide

Prendi il componente più usato del progetto e tipizzalo per intero. Se il tempo speso trova almeno un errore reale, la migrazione ha senso. Se non trova nulla, il problema era altrove.

Il catalogo EneUI espone componenti e blocchi con metadati strutturati (31 ottobre 2026: 111.985 componenti, 1.556 blocchi): sono dati che valgono la pena di essere tipizzati perché descrivono ciò che installi.

Domande frequenti

TypeScript è obbligatorio con React?

No. React funziona in JavaScript. TypeScript aggiunge controlli sui confini, non requisiti di runtime.

Quanto tempo richiede una migrazione?

Dipende da quanti `any` e quanti confini ci sono. Una migrazione incrementale per file è più sostenibile di una conversione totale.

I tipi rallentano lo sviluppo?

Scriverli richiede tempo; leggerli riduce le ipotesi. Il saldo dipende dalla dimensione del progetto e dalla stabilità delle API.

Meglio `type` o `interface`?

Per le props `type` è sufficiente. `interface` è utile quando vuoi estendere. La coerenza conta più della scelta.

Posso usare TypeScript solo nei componenti nuovi?

Sì, purché il confine sia esplicito. I file misti senza `strict` producono falsa sicurezza.