# TypeScript or JavaScript for UI work: what actually changes

TypeScript doesn't make a UI better by itself. It helps where boundaries are unclear: props, variants, tokens and catalogue data. Here is where it pays.

> Page: https://ui.eneawork.it/blog/typescript-o-javascript-ui
> Markdown: https://ui.eneawork.it/blog/typescript-o-javascript-ui.md

*2026-10-31*

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

## Dove TypeScript costa

## 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

## 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.

## FAQ

### 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.
