JSON a TypeScript

Genera interfaces TypeScript desde JSON

Prueba un ejemplo
Nombre de la interfaz raíz:

Entrada JSON

Salida TypeScript

Se ejecuta localmente · Es seguro pegar secretos
Las interfaces TypeScript aparecerán aquí…

¿Qué es la conversión de JSON a TypeScript?

Pega un payload JSON y obtendrás interfaces TypeScript — contratos tipados que describen exactamente qué propiedades tiene un objeto y qué tipo tiene cada una. Sin ellas, los datos de JSON.parse() llegan como any, sin asistencia del editor ni comprobaciones del compilador sobre el acceso a propiedades o las asignaciones. Convertir JSON a TypeScript te da esa seguridad sin tener que escribir las interfaces a mano.

TypeScript cubre los seis tipos de valor JSON: string, number, boolean, null, object y array. Cada objeto JSON anidado se convierte en su propia interfaz con nombre. Los arrays se tipan a partir de su primer elemento. El resultado coincide con lo que JSON.parse() devuelve realmente en tiempo de ejecución, por lo que las interfaces reflejan datos reales en lugar de suposiciones.

Escribir interfaces a mano para JSON grande o muy anidado es tedioso y propenso a errores. Un generador de JSON a TypeScript lee la estructura automáticamente, gestiona el anidamiento de forma recursiva y produce código de interfaz limpio en segundos. Es especialmente útil al conectar una API desconocida, hacer prototipos con datos de prueba o migrar una base de código JavaScript a TypeScript. También te libera de rastrear nombres de propiedades y tipos anidados a mano, para que puedas centrarte en la lógica de la aplicación en lugar de en el boilerplate de tipos.

¿Por qué usar un generador de JSON a TypeScript?

Generar interfaces TypeScript a mano es práctico para objetos pequeños, pero se vuelve inmanejable rápidamente con estructuras anidadas o respuestas de API grandes. Imagina una respuesta de API con 50 campos y tres niveles de anidamiento — escribirlo a mano implica docenas de interfaces, cada una fuente potencial de erratas o campos anulables omitidos. Un generador automático produce el conjunto completo en milisegundos y reduce la probabilidad de discrepancias de tipos entre tu código y los datos que consume. Más allá de la precisión, mantiene tus tipos sincronizados con el contrato real de la API. Cuando un servicio cambia la forma de su respuesta, basta con pegar el JSON actualizado y regenerar — mucho más rápido que buscar cada propiedad que cambió en un archivo de interfaces escrito a mano.

Genera interfaces al instante
Pega cualquier payload JSON y obtén interfaces correctamente tipadas en milisegundos. Sin configuración, sin paso de compilación.
🔒
Mantén los datos privados
Toda la conversión se ejecuta en tu navegador. Tu JSON nunca sale de tu máquina, lo que importa al trabajar con datos de producción o respuestas internas de API.
📋
Gestiona estructuras anidadas automáticamente
Los objetos anidados producen interfaces separadas con nombre. Arrays, campos anulables y tipos mixtos se resuelven sin intervención manual.
🌐
Sin cuenta ni instalación
Funciona en cualquier navegador moderno. Sin paquetes npm que instalar, sin herramientas CLI que configurar, sin formularios de registro que rellenar.

Casos de uso de JSON a TypeScript

Integración de APIs en el frontend
Pega una respuesta JSON de REST o GraphQL para generar interfaces para tus componentes React, Angular o Vue. Las props y el estado con tipado seguro evitan sorpresas en tiempo de ejecución. También puedes compartir interfaces generadas entre frontend y backend en un monorepo para que ambos lados acuerden la misma forma de datos.
Tipado de respuestas en el backend
Los servicios Node.js y Deno que consumen APIs de terceros se benefician de las interfaces generadas. Define el contrato una vez, detecta discrepancias de forma en tiempo de compilación. Las interfaces generadas también son documentación ligera para los consumidores del servicio, reduciendo la necesidad de archivos de esquema separados o páginas de wiki.
Archivos de configuración DevOps
Herramientas de infraestructura como AWS CDK o Pulumi usan configuraciones JSON. Genera tipos TypeScript para esas configuraciones y valídalas antes del despliegue. Esto detecta despliegues mal configurados causados por erratas o tipos de valor incorrectos antes de que el código llegue a producción.
Fixtures de pruebas QA
Genera interfaces desde fixtures JSON de prueba para que tus aserciones coincidan con la forma de datos esperada. Detecta campos faltantes o renombrados antes de que se ejecuten los tests.
Contratos de pipelines de datos
Cuando un pipeline produce salida JSON, las interfaces generadas actúan como esquema para los consumidores downstream. Los cambios en la forma de la salida provocan errores en tiempo de compilación.
Aprendizaje de TypeScript
Estudiantes y desarrolladores nuevos en TypeScript pueden pegar estructuras JSON conocidas y ver cómo se mapean las interfaces a los datos. Tiende un puente entre el tipado dinámico y el estático.

Referencia de mapeo de tipos JSON a TypeScript

Cada valor JSON se mapea a un tipo TypeScript. La tabla siguiente muestra cómo se traduce cada tipo primitivo y estructural de JSON. Este mapeo sigue el estándar JSON ECMA-404 y los tipos integrados de TypeScript.

Tipo JSONValor de ejemploTipo TypeScript
string"hello"string
number42, 3.14number
booleantrue, falseboolean
nullnullnull
object{"key": "value"} nested interface
array[1, 2, 3]number[] (inferred from first element)

interface vs type alias en TypeScript

TypeScript ofrece dos formas de describir la forma de un objeto: declaraciones interface y aliases type. Ambas sirven para representar estructuras JSON, pero difieren en el comportamiento de extensión y fusión. La mayoría de los generadores de JSON a TypeScript producen interfaces porque son la opción idiomática para formas de objetos en TypeScript.

interface
Admite la fusión de declaraciones y la sintaxis extends. Preferida para formas de objetos, especialmente en APIs públicas y librerías. Puede ser extendida por otras interfaces o cruzada con tipos.
type
Admite tipos unión, tipos intersección y tipos mapeados. Más adecuada para tipos computados, uniones discriminadas o cuando necesitas crear un alias de un primitivo. No puede reabrirse para fusión de declaraciones.

Ejemplos de código

A continuación se muestran ejemplos de generación de interfaces TypeScript desde JSON en distintos lenguajes y herramientas. Cada fragmento produce salida ejecutable.

TypeScript
// Manual interface definition from a JSON shape
const json = '{"id": 1, "name": "Alice", "active": true}';
const parsed = JSON.parse(json);

interface User {
  id: number;
  name: string;
  active: boolean;
}

const user: User = parsed;
console.log(user.name); // "Alice" — fully typed
JavaScript (json-to-ts library)
import JsonToTS from 'json-to-ts';

const json = {
  id: 1,
  name: "Alice",
  address: { street: "123 Main St", city: "Springfield" },
  tags: ["admin", "user"]
};

const interfaces = JsonToTS(json, { rootName: "User" });
console.log(interfaces.join("\n\n"));
// interface Address {
//   street: string;
//   city: string;
// }
//
// interface User {
//   id: number;
//   name: string;
//   address: Address;
//   tags: string[];
// }
Python (datamodel-code-generator)
# Install: pip install datamodel-code-generator
# Generate TypeScript-style types from JSON using Pydantic models

# Command line:
# datamodel-codegen --input data.json --output model.py

# Or generate TypeScript directly with quicktype:
# pip install quicktype
# quicktype --lang ts --src data.json --out types.ts

import json

data = {"id": 1, "name": "Alice", "scores": [98, 85, 92]}

# Python equivalent using TypedDict (Python 3.8+)
from typing import TypedDict, List

class User(TypedDict):
    id: int
    name: str
    scores: List[int]

user: User = data  # type-checked by mypy
CLI (quicktype)
# Install quicktype globally
npm install -g quicktype

# Generate TypeScript interfaces from a JSON file
quicktype --lang ts --src data.json --out types.ts

# From a JSON string via stdin
echo '{"id": 1, "name": "Alice"}' | quicktype --lang ts

# Output:
# export interface Root {
#   id:   number;
#   name: string;
# }

Preguntas frecuentes

¿Cómo gestiona JSON a TypeScript los campos opcionales?
Si un valor JSON es null, el generador marca la propiedad como opcional con el sufijo ? y le asigna el tipo null. Si necesitas distinguir entre claves ausentes y valores null, puedes ajustar manualmente la salida para usar undefined en las propiedades faltantes.
¿Puedo convertir arrays JSON a TypeScript?
Sí. Si tu JSON raíz es un array, el generador inspecciona el primer elemento para inferir el tipo del item y produce una interfaz para ese elemento. El tipo raíz se convierte en esa interfaz seguida de []. Los arrays vacíos producen unknown[] ya que no hay ningún elemento que inspeccionar.
¿Qué ocurre con objetos JSON profundamente anidados?
Cada objeto anidado genera una interfaz separada con nombre. El nombre se deriva de la clave de la propiedad, convertida a PascalCase. Por ejemplo, una propiedad llamada "shipping_address" produce una interfaz llamada ShippingAddress. Esto mantiene la salida legible incluso para JSON con cuatro o cinco niveles de anidamiento. Si varios objetos anidados comparten la misma estructura, puede que quieras consolidarlos manualmente en una sola interfaz compartida para reducir la duplicación en tu base de código.
¿Hay diferencia entre json2ts y quicktype?
json2ts es un conversor simple que mapea valores JSON a interfaces TypeScript directamente. quicktype va más allá analizando múltiples muestras JSON, deduplicando formas similares y admitiendo salida en más de 20 lenguajes. Para conversiones puntuales, una herramienta en el navegador es más rápida. Para pipelines CI o generación de código en múltiples lenguajes, quicktype es la mejor opción.
¿Por qué usar interfaces en lugar de aliases type para JSON?
Las interfaces admiten la fusión de declaraciones, lo que significa que puedes extender una interfaz generada en un archivo separado sin modificar el original. También producen mensajes de error más claros en la mayoría de los editores. Los aliases type son mejores cuando necesitas tipos unión o tipos mapeados, pero para formas de objetos JSON sencillas, las interfaces son la elección estándar. Si estás creando una librería o SDK, las interfaces son casi siempre la opción correcta porque los consumidores pueden ampliarlas mediante fusión de declaraciones sin tocar tu fuente.
¿Puede esta herramienta gestionar JSON con tipos inconsistentes en arrays?
El generador infiere el tipo del elemento del array a partir del primer elemento no nulo. Si tu array contiene tipos mixtos — por ejemplo, objetos mezclados con cadenas — la salida refleja solo la forma del primer elemento. Para arrays heterogéneos, debes definir manualmente un tipo array unión tras la generación, como un tipo que acepte tanto elementos Item como string, para representar con precisión todos los tipos de elemento posibles.
¿Cómo uso las interfaces generadas en un proyecto real?
Copia las interfaces generadas en un archivo .ts de tu proyecto, normalmente bajo un directorio types/ o models/. Impórtalas donde obtengas o proceses datos JSON. Combínalas con un validador en tiempo de ejecución como Zod o io-ts si necesitas garantizar que las respuestas de API coincidan con la interfaz en tiempo de ejecución, no solo en compilación. Con Zod, puedes derivar el tipo TypeScript directamente del esquema usando su utilidad infer, eliminando la duplicación entre la definición de la interfaz y la lógica de validación.
¿Las interfaces TypeScript generadas ofrecen seguridad de tipos en tiempo de ejecución?
No — el sistema de tipos de TypeScript se elimina en la compilación. Las interfaces existen solo en tu editor y durante la compilación, no en tiempo de ejecución. JSON.parse() siempre devuelve any independientemente del tipo que asignes después. Para aplicar tipos en tiempo de ejecución, combina tus interfaces generadas con una librería como Zod o io-ts. Estas librerías validan que un objeto entrante realmente coincide con la forma esperada antes de usarlo, protegiéndote contra respuestas de API malformadas, campos faltantes y valores null inesperados.