Generación de tipos

JSON a TypeScripttipos que muestran las diferencias entre respuestas

Compara el tag ausente y el score con null del ejemplo. Si ya tienes un contrato, elige el modo auxiliar Schema.

JSON a TypeScript

Entrada JSON

Se analiza y genera en este navegador. La entrada no se sube ni se almacena.

Resultado TypeScript

Opciones de generación

Los campos ausentes son opcionales; null se conserva. Los arrays vacíos son unknown[]. Usa strictNullChecks en tu proyecto.

3 declaraciones · 1 propiedades opcionales

JSON a TypeScript sirve para preparar un primer modelo de una respuesta API. Una sola respuesta correcta puede ocultar campos que a veces faltan. Incluye varios registros representativos en un array antes de adoptar las declaraciones.

Este convertidor JSON a TypeScript diferencia la ausencia de una propiedad de un valor null explícito. El resultado necesita una revisión con la documentación de la API: ni los errores no incluidos ni las variantes futuras se pueden deducir de una muestra.

Por qué usar JSON a TypeScript aquí

Mirar todos los registros

JSON a TypeScript analiza cada elemento del array. Si un objeto no tiene tag, ese campo se vuelve opcional. Si score contiene números y null, se genera una unión. La ausencia y el valor vacío conservan significados distintos.

Dos registros se combinan en un tipo: una marca discontinua señala un campo ausente y una marca hueca representa null.

Completar la muestra con un contrato

Un Schema permite declarar campos obligatorios y valores enum que no aparecen en los ejemplos. Selecciona el modo de entrada expresamente. Una restricción no compatible detiene la generación con su ruta, en lugar de desaparecer del resultado.

Una muestra y un contrato de estructura recorren caminos separados hacia tarjetas de declaraciones de tipos.

Qué revisar antes de exportar

01

Reunir variantes en la misma posición

Agrupa los registros en un array JSON válido. Se comparan objetos en la misma posición estructural; los campos con el mismo nombre en otras partes del documento no se convierten automáticamente en un modelo compartido.

02

Elegir el modo y después el ejemplo

Cambiar el modo conserva el texto. Ejemplo carga contenido adecuado para el modo elegido. En Schema, required determina los campos obligatorios; hacer todos los campos opcionales solo afecta a las muestras.

03

Actualizar después de cada cambio

La generación automática espera 350 ms tras editar. Desactívala para ver Generar, o usa Ctrl/Cmd+Enter. Modificar la entrada o una opción bloquea la exportación hasta obtener un resultado actual. Root es la base de los nombres derivados.

De valores a declaraciones con nombre

Todos los elementos aportan evidencia

Los números y cadenas en una misma posición producen tipos unión. También se analizan arrays anidados. Un array vacío aprovecha los tipos observados en arrays con elementos en esa posición; sin ninguna evidencia queda como unknown[]. No se generan tuplas de longitud fija.

Opcional no significa nullable

Una propiedad ausente de algunos objetos recibe ?. Un null presente se conserva como null o parte de una unión. Un valor que solo es null no revela un futuro string o number. Activa strictNullChecks en el proyecto para aprovechar la distinción.

Generador de tipos TypeScript con nombres

Los objetos anidados reciben nombres derivados de sus campos superiores; las colisiones añaden sufijos numéricos estables. Las claves conservan su escritura, con comillas cuando hace falta. El nombre raíz admite identificadores ASCII de hasta 64 caracteres, sin palabras reservadas.

Un subconjunto explícito de Schema

Admite Schemas booleanos, type, properties, required, un solo Schema items, additionalProperties booleano, enum/const escalares y anyOf limitado. Puedes generar interfaces TypeScript o alias type, elegir export y usar dos o cuatro espacios. integer se representa como number.

Hasta dónde llega la inferencia

La muestra no es toda la API
La inferencia usa únicamente valores suministrados. Al combinar por campos, se pierden relaciones entre discriminadores y otras propiedades. Las fechas y UUID siguen siendo string; no se deducen conjuntos enum. Añade las variantes ausentes antes de usar el modelo.
Sin validación en tiempo de ejecución
Se generan declaraciones, no parsers, clases, Zod ni serializadores. number no impone precisión ni valores enteros. additionalProperties=false elimina la firma de índice, pero el tipado estructural de TypeScript no garantiza objetos exactos en ejecución.
Las restricciones desconocidas detienen el proceso
Referencias, definiciones, oneOf/allOf, condiciones, format, patrones, longitudes, rangos y tuplas se rechazan. Las palabras de objeto o array requieren un type explícito adecuado. No se admiten Schemas en additionalProperties, enums de objetos o arrays, ni literales numéricos demasiado grandes.
Un documento JSON estricto
Los comentarios, comas finales, claves duplicadas y JSONL impiden la conversión. Los errores sintácticos muestran línea y columna. No hay reparación, lectura de URL, importación de archivos ni lotes. Un campo type no activa el modo Schema automáticamente.
Límites sin código recortado
Máximo: 500.000 caracteres de entrada, profundidad 100, 50.000 nodos, 1.000.000 caracteres de salida y 1.000 declaraciones. Superarlos bloquea la exportación. Un objeto vacío sin evidencia de campos recibe una firma de índice unknown, en vez del tipo demasiado amplio {}.

Preguntas sobre JSON a TypeScript

¿Cuál es la diferencia entre interface y type alias?

Aquí la elección cambia las declaraciones de objetos. interface describe estructuras de objetos; un alias type también puede nombrar arrays, uniones y tipos primitivos. Por eso una raíz no objeto siempre necesita type, incluso al seleccionar interface.

¿Cómo se gestiona un array de objetos con claves diferentes?

Participan todos los objetos en esa posición. Una clave que falta en alguno se marca como opcional y los valores observados determinan su tipo. Un registro aislado no permite descubrir posibles omisiones.

¿Cómo se maneja null?

JSON a TypeScript conserva el valor null. Si aparece junto a un número, produce number | null. Si solo se observa null, ese es el tipo. La opción de campos opcionales no elimina el valor nulo.

¿Qué pasa con los arrays vacíos?

Sin elementos que aporten información se genera unknown[]. Si otros arrays en la misma posición contienen valores, se aprovechan sus tipos. No se elige string[] ni un modelo de objeto sin evidencia.

¿Puede detectar fechas o enums?

Las cadenas con formato de fecha permanecen como string. Una muestra no demuestra que una lista de valores sea exhaustiva. Si conoces los valores permitidos, exprésalos mediante enum o const en un Schema compatible.

¿Encontraste una inferencia que conviene revisar?

Empieza con varias respuestas

Usa JSON a TypeScript con distintas respuestas, compara los campos opcionales y null, y exporta las declaraciones para revisarlas dentro del proyecto.