YamlBox

Artículo guía · 6 min de lectura

Genera TypeScript tipos a partir de JSON que dicen la verdad

El paso JSON a TypeScript generalmente comienza copiando una respuesta API en un editor y escribiendo a mano una interfaz, una pequeña tarea que esconde un gran riesgo: los tipos que escribe describen la respuesta que vio, no las respuestas que sus usuarios activarán.

Actualizado

JSON a TypeScript: comience con una carga útil representativa, no una afortunada

Un generador solo puede inferir lo que muestra su muestra. Obtenga una respuesta que incluya los casos incómodos: un registro con el campo opcional presente y otro sin él, un valor nulo, una matriz vacía, un decimal. Una buena muestra supera a cinco limpias.

Los campos opcionales provienen de matrices.

Dado un solo objeto, todas las claves parecen necesarias. Dada una matriz de objetos, un generador puede comparar elementos: una clave que falta en algunos elementos es opcional (¿clave?: cadena) y se requiere una clave presente en todas partes. Esta es la razón por la que pegar una lista de registros produce tipos dramáticamente mejores que pegar un registro.

Modelo nulo honestamente

                // One sample with "deleted_at": null and one with a date
interface User {
  id: number;
  deleted_at: string | null;   // not string, not optional
}
              

nulo e indefinido son cosas diferentes. Un campo que acepta valores NULL está presente con un valor nulo; un campo opcional puede estar completamente ausente. Los generadores que colapsan los dos producen interfaces que verifican los tipos mientras están equivocados: el tipo de error más costoso, porque el compilador deja de advertirle.

Los sindicatos vencen a cualquier

Cuando un campo es una cadena en un registro y un número en otro (existen API confusas), el tipo honesto es cadena | número. Recurrir a cualquiera o desconocido silencia el compilador y lleva el fallo a producción. Un generador que informe al sindicato al menos documenta la realidad, y luego puedes preguntarle al equipo API por qué.

Los tipos son en tiempo de compilación; validar en tiempo de ejecución

  • TypeScript desaparece en tiempo de ejecución. Nada impide que una carga útil con formato incorrecto llegue con una forma que su interfaz prohíbe.
  • Utilice tipos generados para describir lo que espera y un validador de tiempo de ejecución (Zod, Valibot o un esquema JSON con AJV) en el límite donde los datos ingresan a su aplicación.
  • Generar un esquema JSON a partir del mismo ejemplo le brinda la mitad del tiempo de ejecución: el esquema se valida y las interfaces se documentan.

Mantener los tipos regenerados, no reescritos

Los tipos escritos a mano se alejan del API. Trate el generador como un paso en su flujo de trabajo: pegue una respuesta nueva, genere, péguela en su archivo de tipos y deje que el compilador le muestre cada lugar donde cambió el API. Es el detector de deriva API más barato que existe y cuesta treinta segundos.

Pruébelo con el generador de JSON a TypeScript: interfaz o salida de tipo, claves opcionales detectadas, uniones preservadas.