Mcatorce Suite
← Volver al blog

Genera interfaces de TypeScript a partir de una respuesta JSON (y dónde falla la inferencia)

Cómo convertir una respuesta de API de ejemplo en interfaces de TypeScript, qué acierta la inferencia y en qué casos debes revisar el resultado a mano.

Prueba la herramienta: JSON a Tipos

Tipar a mano la respuesta de una API es lento y propenso a errores. Pegar un ejemplo y generar los tipos es más rápido, y es un buen punto de partida siempre que sepas qué puede y qué no puede saber el generador.

Cómo funciona la inferencia

El generador lee cada valor y elige un tipo: las cadenas pasan a string, los números a number, los booleanos a boolean, los objetos a interfaces con nombre y los arreglos a T[]. Los objetos anidados se extraen a sus propias interfaces con el nombre de la clave, así address pasa a ser Address.

{ "id": 1, "tags": ["a"], "address": { "city": "Lima" } }

se convierte en una interfaz con id: number, tags: string[] y address: Address.

Arreglos de objetos

Cuando un arreglo contiene varios objetos, el generador combina sus formas. Una clave presente en todos los elementos es obligatoria, y una que falta en algunos pasa a ser opcional (clave?: tipo). Si un valor es null en un elemento y una cadena en otro, el resultado es string | null. Dale una muestra con varios elementos distintos para obtener el mejor resultado.

Interface o alias de tipo

Ambos describen formas de objetos. Las interfaces se pueden extender y combinar, y los alias de tipo son mejores para uniones. Para modelos de datos simples sirven los dos, así que sigue el estilo de tu equipo. Opciones como los campos readonly y export son cuestión de gusto.

Dónde debes revisar

  • Una sola muestra no revela los campos opcionales. Si un campo solo aparece a veces, añade más muestras o márcalo tú como opcional.
  • Uniones y enumeraciones. Un campo de estado que es "active" o "closed" aparece como string. Sustitúyelo por una unión de literales.
  • Fechas. JSON no tiene tipo de fecha, así que las cadenas ISO se tipan como string. Conviértelas de forma explícita en tu código.
  • Los arreglos vacíos no pueden revelar el tipo de sus elementos.

Los tipos describen lo que esperas, pero no validan datos en tiempo de ejecución. Con entradas no confiables, valida también con una librería de esquemas.

Preguntas frecuentes

¿Debo guardar en el repositorio los tipos generados? Sí, después de revisarlos y renombrarlos. Trata la salida como un borrador.