UTILS.
100% en el navegador
📘

JSON Schema a TypeScript

Compila un JSON Schema (draft-07 o 2020-12) en interfaces y alias de tipo TypeScript, manejando required, enums, $ref, arrays y combinadores.

salida

Acerca de esta herramienta

La herramienta JSON Schema a TypeScript compila un documento JSON Schema en interfaces y alias de tipo TypeScript, haciendo lo que hace la popular librería json-schema-to-typescript sin instalar una cadena de herramientas. A diferencia de los conversores de muestras JSON, este lee un esquema real: recorre el objeto del esquema y convierte type:'object' en una interface donde las claves listadas en required no son opcionales y el resto se marcan con ?.

Todo se analiza y se genera localmente en tu navegador con JSON.parse y JavaScript plano, así que tu esquema nunca sale de la página. Los esquemas de cadena con un enum pasan a una unión de literales de cadena; string plano, number/integer, boolean y null mapean a sus equivalentes de TypeScript; los arrays pasan a T[] (una tupla cuando items es un array). Los combinadores están soportados: allOf pasa a una intersección (A & B) y anyOf / oneOf pasan a uniones (A | B), y un type:[T,'null'] anulable pasa a T | null.

Las referencias se resuelven por nombre: un $ref que apunta a #/definitions/X o #/$defs/X emite una referencia de tipo con nombre, y cada definición se genera como su propia export interface o export type. additionalProperties añade una firma de índice [key: string]: T. El nombre del tipo raíz recurre al title o $id del esquema. Alterna la salida interface-vs-type y si las cadenas description del esquema pasan a comentarios JSDoc /** */. Copia el resultado o descarga un archivo .ts.

Preguntas frecuentes

¿Qué características de JSON Schema están soportadas?
object con properties y required, enums de string como uniones de literales, number/integer/boolean/null, arrays (incluidas tuplas), combinadores allOf/anyOf/oneOf, $ref a definitions o $defs, additionalProperties como firma de índice, y arrays de tipo anulables como ["string","null"].
¿Cómo se manejan $ref y definitions?
Un $ref como #/definitions/Address (o #/$defs/Address) pasa a una referencia a un tipo con nombre Address, y cada entrada bajo definitions o $defs se emite como su propia export interface o export type, para que las referencias se resuelvan dentro de la salida.
¿Qué nombra el tipo raíz?
El campo de nombre raíz si lo estableces, de lo contrario el title del esquema, de lo contrario el último segmento de su $id, de lo contrario Root. Los nombres de definición vienen de su clave en definitions o $defs, convertidos a PascalCase.
¿Puedo conservar las descripciones del esquema?
Sí. Con JSDoc activado (por defecto), cualquier cadena description en el esquema o en una propiedad se emite como un comentario /** ... */ encima del tipo o campo correspondiente, preservando la documentación en el TypeScript generado.

Más herramientas