{ }JSONKit.tools

JSON a TypeScript

Convierte una carga de ejemplo en interfaces de TypeScript: los objetos anidados reciben su propio tipo, los arrays mixtos se vuelven uniones, y las claves ausentes en algunas filas salen como opcionales.

JSON

TypeScript

Esperando la entrada…

Sobre esta herramienta

Tipar a mano la respuesta de una API es tedioso y fácil de equivocar de forma sutil. Pega una carga real y esto genera las interfaces correspondientes: cada objeto anidado se convierte en su propio tipo con nombre, los arrays de objetos se fusionan en una sola forma para que una clave ausente en algunas filas se marque como opcional, y los arrays mixtos se vuelven uniones. Las formas idénticas se emiten una vez y se comparten. Lo que no puede hacer es adivinar más allá del ejemplo: un campo que en tu muestra es null se tipa como null, porque nada en los datos dice otra cosa.

Cómo se usa

  1. 1Pega una respuesta JSON representativa: cuantas más filas tenga un array, mejor será la detección de campos opcionales.
  2. 2Nombra el tipo raíz y elige interface o type, según tu base de código.
  3. 3Copia el resultado a un archivo .d.ts y luego amplía cualquier campo que el ejemplo describiera de forma demasiado estrecha.

Preguntas frecuentes

›¿Cómo se deciden los campos opcionales?

Comparando los objetos de un array. Si una clave está presente en algunos elementos y ausente en otros, se marca como opcional; una clave presente en todos es obligatoria. Un objeto suelto no aporta evidencia en ningún sentido, así que todas sus claves salen obligatorias.

›¿Por qué un campo se tipa como null en lugar de string | null?

Porque null es todo lo que mostró la muestra. La inferencia solo puede describir los datos que recibió: amplía esos campos a mano, o pega una muestra que incluya un valor real.

›¿Por qué dos claves distintas comparten una interfaz?

Las formas idénticas se emiten una sola vez y se reutilizan, lo que mantiene la salida corta. Renombra la interfaz si son conceptualmente tipos distintos que hoy se parecen por casualidad.

›¿interface o type: cuál elijo?

Las interfaces se pueden extender y fusionar por declaración, lo que encaja con formas de objeto y con API públicas. Los alias de tipo cubren además uniones y tipos mapeados. Para formas de carga generadas sin más, ambos se comportan igual, así que usa lo que ya use tu base de código.

›¿Esto valida los datos en tiempo de ejecución?

No. Los tipos de TypeScript se borran al compilar, así que nada comprueba que la respuesta de una API encaje de verdad. Si necesitas garantías en ejecución, genera un esquema con Zod o Valibot y deriva el tipo a partir de él.