Cómo usar: JSON a TypeScript
- Pega una muestra de JSON representativa, por ejemplo una respuesta copiada de la pestaña de red de tu navegador.
- Define el nombre del tipo raíz (por ejemplo
UseroApiResponse). - Elige
interfaceotype, la sintaxis de los arrays y si quieres exportar las declaraciones o marcar las propiedades como readonly. - Copia el código generado en un archivo
.tso descárgalo.
¿Qué hace un convertidor de JSON a TypeScript?
Infiere tipos estáticos a partir de datos de ejemplo. En lugar de escribir a mano una interfaz para cada respuesta de API, pegas una respuesta real y obtienes las declaraciones de TypeScript correspondientes: una interfaz con nombre por cada objeto anidado, arrays tipados y uniones cuando los valores varían. Es la forma más rápida de obtener autocompletado y comprobaciones en tiempo de compilación para datos que recibes de una API REST, un webhook o un archivo de configuración JSON.
Cómo se infieren los tipos
| Valor JSON | Tipo TypeScript |
|---|---|
"text" | string |
42, 3.14 | number |
true | boolean |
null | null (combinado con otros tipos, p. ej. string | null) |
{ … } | Una interfaz con nombre (clave profile → Profile) |
["a", "b"] | string[] |
[1, "two"] | (number | string)[] |
[] | unknown[] (no hay muestra de la que inferir) |
Los arrays de objetos se fusionan
Cuando un array contiene varios objetos, el generador los fusiona en una sola interfaz en lugar de tomar solo el primer elemento. Una clave que aparece en algunos elementos pero no en otros se vuelve opcional (archived?: boolean), y una clave cuyos valores difieren entre elementos recibe un tipo unión (license: string | null). Las interfaces de los elementos se nombran en singular a partir de la clave: repos → Repo, categories → Category. Las estructuras idénticas que aparecen en distintos lugares se declaran una sola vez y se reutilizan.
interface vs. type
Para formas de objeto, ambos son casi intercambiables. Las declaraciones interface se pueden extender con extends y fusionar volviéndolas a declarar, y suelen dar mensajes de error más claros; los alias type pueden expresar uniones, tuplas y tipos mapeados. Muchos equipos usan interfaces para modelos de datos: elige la que encaje con tus reglas de lint (por ejemplo @typescript-eslint/consistent-type-definitions).
Límites de la inferencia: revisa el resultado
Una muestra solo muestra lo que había. Un campo que es null en tu muestra se tipará como null; cámbialo al tipo real (por ejemplo string | null). Las fechas llegan como cadenas ISO y se tipan como string, porque JSON no tiene tipo fecha. Las claves que no son identificadores válidos, como social-links, se entrecomillan automáticamente. Para validar en tiempo de ejecución datos no confiables, combina estos tipos con un validador de esquemas como Zod. Antes de generar, limpia tu muestra con el Formateador de JSON, o convierte configuraciones YAML con YAML a JSON.
También se busca como: json a interface, generador de interfaces typescript, json2ts, json a tipo typescript, generar tipos desde json.
Herramientas que combinan con: JSON a TypeScript
- CSV a JSON — Pega CSV o TSV y obtén un array JSON de objetos.
- Conversor SVG a JSX — Pega un SVG de Figma, Illustrator o de un set de iconos y obtén un componente React (JSX o TSX) listo para usar, con una vista previa segura del icono.
- cURL a código — Pega un comando curl, ya sea de la documentación de una API o de «Copiar como cURL» en las DevTools de tu navegador, y obtén código listo para ejecutar en seis lenguajes, con las cabeceras, el cuerpo y la autenticación incluidos.
- Validador JSON Schema — Pega un schema y algunos datos JSON para ver exactamente qué valores incumplen cada regla, o genera un schema inicial a partir de datos de ejemplo.
Preguntas frecuentes
¿Debo usar interface o type para datos JSON?
extends; los alias de tipo también cubren uniones y tipos mapeados. Elige el que prefiera la guía de estilo de tu proyecto: el selector cambia toda la salida.¿Cómo se detectan las propiedades opcionales?
?. También puedes hacer opcionales todas las propiedades nulables con la casilla que está debajo de la salida.¿Por qué una propiedad aparece como null?
null en todas las muestras donde aparecía, así que no hay información sobre su tipo real. Sustituye null por el tipo esperado, por ejemplo string | null, o pega una muestra donde el valor esté rellenado.