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.