Migrare codice JavaScript a TypeScript strict senza rompere nulla
Converti un file o modulo JavaScript in TypeScript con tipi dedotti dall’uso reale, un tsconfig consigliato, l’elenco dei bug scoperti dai tipi e un piano per il resto del progetto. Pensato per ChatGPT, Claude, Gemini e Microsoft Copilot. Include 4 variabili personalizzabili e puoi copiarlo gratuitamente con un clic.
Intermedio · Codice · In attesa di revisione editoriale
Prompt
Agisci come ingegnere TypeScript senior che ha migrato grandi codebase JavaScript in modo incrementale.
Contesto:
- Codice da migrare: {{codice_js}}
- Progetto e strumenti di build: {{progetto}}
- Livello di rigore: {{rigore}}
- Ambiente di esecuzione: {{ambiente}}
Se il codice importa moduli che non ho mostrato o riceve dati di forma poco chiara, chiedimelo prima di inventare tipi.
Consegna:
1. Un tsconfig.json consigliato per {{rigore}}, spiegando le opzioni chiave (strict, noUncheckedIndexedAccess, allowJs, checkJs, module e moduleResolution in base al build).
2. Il codice convertito in TypeScript, con tipi e interfacce dedotti dall'uso reale. Segna ogni tipo ipotizzato con un commento `// IPOTESI:`.
3. I dati esterni (risposte API, localStorage, JSON) tipizzati come `unknown` e validati o ristretti prima dell'uso.
4. L'elenco di bug o comportamenti dubbi emersi grazie ai tipi (possibili undefined, confronti tra tipi diversi, argomenti opzionali gestiti male), con riga e correzione proposta, separato dalla conversione.
5. I pacchetti @types necessari e le modifiche agli script del package.json o alla configurazione di ESLint.
6. Un piano per migrare il resto del progetto: ordine dei file (dalle foglie alla radice), convivenza con JS durante la transizione e come evitare che tornino gli `any`.
Vincoli:
- Mantieni esattamente il comportamento; non rifattorizzare la logica nello stesso passaggio.
- Vietati `any`, `as any`, `@ts-ignore` e asserzioni non-null `!` senza una giustificazione scritta.
- Se una correzione cambia il comportamento, proponila a parte senza applicarla.
- Usa [DA COMPLETARE] per ciò che non si può dedurre.
Formato: tsconfig, codice convertito, elenco dei rilievi e piano, ognuno nella propria sezione.Come usarlo
- Parti da un file piccolo con poche dipendenze e incollalo intero. 2. Indica bundler o framework e il rigore desiderato. 3. Controlla i commenti IPOTESI, esegui tsc --noEmit e i test, poi ripeti file per file.
Esempio d'uso
Codice: utils/carrello.js con calcolo di totali e IVA · Progetto: React con Vite ed ESLint · Rigore: graduale · Ambiente: browser.
Esempio di risultato
tsconfig.json (opzioni chiave)
"strict": true, "allowJs": true, "checkJs": true, "noUncheckedIndexedAccess": true e "moduleResolution": "bundler" (adatto a Vite). Così il JS rimanente viene controllato mentre migri un file alla volta.
utils/carrello.ts
// IPOTESI: forma dedotta dall'uso nel file originale
export interface ArticoloCarrello {
readonly id: string;
prezzo: number;
quantita: number;
}
export function totaleCarrello(articoli: readonly ArticoloCarrello[], scontoPct = 0): number {
const subtotale = articoli.reduce((somma, a) => somma + a.prezzo * a.quantita, 0);
return subtotale * (1 - scontoPct / 100);
}
export function caricaCarrello(): ArticoloCarrello[] {
const grezzo: unknown = JSON.parse(localStorage.getItem('carrello') ?? '[]');
return Array.isArray(grezzo) ? grezzo.filter(isArticoloCarrello) : [];
}
function isArticoloCarrello(valore: unknown): valore is ArticoloCarrello {
if (typeof valore !== 'object' || valore === null) return false;
const v = valore as Record<string, unknown>;
return typeof v.id === 'string' && typeof v.prezzo === 'number' && typeof v.quantita === 'number';
}
Problemi emersi (non applicati)
| Riga | Problema | Proposta |
|---|---|---|
| [DA COMPLETARE] | JSON.parse lancia un'eccezione se il dato salvato è corrotto | Racchiudere in try/catch e restituire [] |
| [DA COMPLETARE] | sconto a volte arrivava come stringa dal form | Convertire con Number() al confine |
…
Dati chiave
- Categoria
- Programmazione e sviluppo · TypeScript
- Tipo di output
- Codice
- Livello
- Intermedio
- Pensato per
- ChatGPT, Claude, Gemini e Microsoft Copilot
- Verificato in
- In attesa di verifica editoriale
- Variabili
- Codice JavaScript, Progetto e build, Livello di rigore e Ambiente di esecuzione
- Lingua
- Italiano
- Prezzo
- Gratuito, senza registrazione
- Aggiornato
- 07/11/2026
Domande frequenti
Migro tutto in una volta o un po’ alla volta?
Un po’ alla volta, in quasi tutti i progetti. Con allowJs converti un file alla volta partendo da quelli senza dipendenze, e attivi le opzioni strict quando la maggior parte è tipizzata.
Perché usare unknown invece di any per i dati esterni?
Perché unknown ti obbliga a controllare la forma dei dati prima di usarli, mentre any disattiva il controllo. Per le risposte API conviene una validazione a runtime, ad esempio con Zod.
La migrazione può cambiare il comportamento del codice?
Non dovrebbe. Il prompt separa la conversione dai bug emersi grazie ai tipi, così decidi tu cosa correggere e lo testi a parte.
A cosa serve questo prompt?
Converti un file o modulo JavaScript in TypeScript con tipi dedotti dall’uso reale, un tsconfig consigliato, l’elenco dei bug scoperti dai tipi e un piano per il resto del progetto.
Con quali strumenti di IA funziona?
È pensato per ChatGPT, Claude, Gemini e Microsoft Copilot. Non lo abbiamo ancora verificato in questi strumenti, quindi i risultati possono variare da uno all'altro.
Come personalizzo il prompt?
Clicca su «Personalizza» e compila le variabili (Codice JavaScript, Progetto e build, Livello di rigore e Ambiente di esecuzione). Il testo si aggiorna all'istante e poi puoi copiarlo con un clic. I valori vengono salvati solo nel tuo browser.
Serve esperienza per usarlo?
È di livello intermedio: conviene conoscere l'argomento per fornire un buon contesto e valutare il risultato con occhio critico.
Questo prompt è gratuito?
Sì. Tutti i prompt di HomeCasa Prompts sono gratuiti, senza registrazione né abbonamento. Puoi usarli anche in progetti professionali.
Posso fidarmi dell'output dell'IA?
Consideralo una bozza di alta qualità: verifica sempre dati, cifre e affermazioni importanti prima di pubblicare o prendere decisioni.