Migrar código JavaScript a TypeScript estricto sin romper nada
Convierte un archivo o módulo de JavaScript a TypeScript con tipos inferidos del uso real, tsconfig recomendado, lista de errores destapados por los tipos y plan de migración para el resto. Pensado para ChatGPT, Claude, Gemini y Microsoft Copilot. Incluye 4 variables personalizables y se copia gratis en un clic.
Intermedio · Código · Pendiente de revisión editorial
Prompt
Actúa como ingeniero sénior de TypeScript que ha migrado bases de código JavaScript grandes de forma incremental.
Contexto:
- Código a migrar: {{codigo_js}}
- Proyecto y herramientas de build: {{proyecto}}
- Nivel de rigor: {{rigor}}
- Entorno de ejecución: {{entorno}}
Si el código importa módulos que no veo o recibe datos cuya forma no está clara, pregúntame antes de inventar tipos.
Entregables:
1. Un tsconfig.json recomendado para {{rigor}}, explicando las opciones clave (strict, noUncheckedIndexedAccess, allowJs, checkJs, module y moduleResolution según el build).
2. El código convertido a TypeScript, con tipos e interfaces deducidos del uso real. Marca con un comentario `// SUPUESTO:` cada tipo que hayas tenido que suponer.
3. Datos externos (respuestas de API, localStorage, JSON) tipados como `unknown` y validados o estrechados antes de usarse.
4. Lista de errores o comportamientos dudosos que los tipos han destapado (posibles undefined, comparaciones de tipos distintos, argumentos opcionales mal tratados), con la línea y la corrección propuesta, separada de la conversión.
5. Los paquetes @types necesarios y cambios en scripts de package.json o en la configuración de ESLint.
6. Plan para migrar el resto del proyecto: orden de los archivos (de las hojas a la raíz), cómo convivir con JS durante la transición y cómo evitar que vuelvan a aparecer `any`.
Restricciones:
- Conserva exactamente el comportamiento; no refactorices la lógica en el mismo paso.
- Prohibido `any`, `as any`, `@ts-ignore` y aserciones no nulas `!` sin una justificación escrita.
- Si una corrección cambia el comportamiento, proponla aparte y no la apliques.
- Usa [COMPLETAR] para lo que no se pueda deducir.
Formato: tsconfig, código convertido, lista de hallazgos y plan, cada uno en su sección.Cómo usarlo
- Empieza por un archivo pequeño sin muchas dependencias y pégalo completo. 2. Indica el bundler o framework y el rigor deseado. 3. Revisa los comentarios SUPUESTO, ejecuta tsc --noEmit y los tests, y repite archivo por archivo.
Ejemplo de uso
Código: utils/carrito.js con funciones de cálculo de totales e IVA · Proyecto: React con Vite y ESLint · Rigor: gradual · Entorno: navegador.
Resultado de ejemplo
tsconfig.json (claves)
"strict": true, "allowJs": true, "checkJs": true, "noUncheckedIndexedAccess": true y "moduleResolution": "bundler" (encaja con Vite). Así el JS restante se comprueba mientras migras archivo a archivo.
utils/carrito.ts
// SUPUESTO: forma deducida del uso en el archivo original
export interface ItemCarrito {
readonly id: string;
precio: number;
cantidad: number;
}
export function totalCarrito(items: readonly ItemCarrito[], descuentoPct = 0): number {
const subtotal = items.reduce((suma, item) => suma + item.precio * item.cantidad, 0);
return subtotal * (1 - descuentoPct / 100);
}
export function cargarCarrito(): ItemCarrito[] {
const raw: unknown = JSON.parse(localStorage.getItem('carrito') ?? '[]');
return Array.isArray(raw) ? raw.filter(esItemCarrito) : [];
}
function esItemCarrito(valor: unknown): valor is ItemCarrito {
if (typeof valor !== 'object' || valor === null) return false;
const v = valor as Record<string, unknown>;
return typeof v.id === 'string' && typeof v.precio === 'number' && typeof v.cantidad === 'number';
}
Hallazgos (sin aplicar)
| Línea | Problema | Propuesta |
|---|---|---|
| [COMPLETAR] | JSON.parse lanza una excepción si el dato guardado está corrupto | Envolver en try/catch y devolver [] |
| [COMPLETAR] | descuento llegaba a veces como texto desde el formulario | Convertir con Number() en el borde |
…
Datos clave
- Categoría
- Programación y desarrollo · TypeScript
- Tipo de resultado
- Código
- Nivel
- Intermedio
- Pensado para
- ChatGPT, Claude, Gemini y Microsoft Copilot
- Verificado en
- Pendiente de verificación editorial
- Variables
- Código JavaScript, Proyecto y build, Nivel de rigor y Entorno de ejecución
- Idioma
- Español
- Precio
- Gratis, sin registro
- Actualizado
- 07/11/2026
Preguntas frecuentes
¿Migro todo de golpe o poco a poco?
En casi todos los proyectos, poco a poco. Con allowJs puedes convertir archivo a archivo empezando por los que no dependen de otros, y activar opciones estrictas cuando la mayoría ya esté tipada.
¿Por qué usar unknown en lugar de any para los datos externos?
Porque unknown te obliga a comprobar la forma de los datos antes de usarlos, mientras que any desactiva la comprobación. Para respuestas de API conviene validarlas en tiempo de ejecución, por ejemplo con Zod.
¿Puede la migración cambiar el comportamiento de mi código?
No debería. El prompt separa la conversión de los errores que destapan los tipos, para que decidas tú qué corregir y lo pruebes por separado.
¿Para qué sirve este prompt?
Convierte un archivo o módulo de JavaScript a TypeScript con tipos inferidos del uso real, tsconfig recomendado, lista de errores destapados por los tipos y plan de migración para el resto.
¿Con qué herramientas de IA funciona?
Está pensado para ChatGPT, Claude, Gemini y Microsoft Copilot. Todavía no lo hemos verificado en estas herramientas, por lo que los resultados pueden variar entre ellas.
¿Cómo personalizo el prompt?
Pulsa «Personalizar» y rellena las variables (Código JavaScript, Proyecto y build, Nivel de rigor y Entorno de ejecución). El texto se actualiza al instante y después puedes copiarlo con un clic. Los valores se guardan solo en tu navegador.
¿Necesito experiencia para usarlo?
Es de nivel intermedio: conviene que conozcas el tema para aportar buen contexto y revisar el resultado con criterio.
¿Este prompt es gratis?
Sí. Todos los prompts de HomeCasa Prompts son gratuitos, sin registro ni suscripción. Puedes usarlos también en proyectos profesionales.
¿Puedo fiarme del resultado de la IA?
Úsalo como un borrador de calidad: revisa siempre datos, cifras y afirmaciones importantes antes de publicarlos o tomar decisiones.