JSON a TypeScript
Pega una muestra de JSON y la herramienta infiere interfaces de TypeScript que coinciden con su forma. Los campos se tipifican por los valores observados (string, number, boolean, Array<T>), los objetos anidados obtienen sus propias interfaces nombradas, y los campos observados como nulos o faltantes se vuelven opcionales (?) o anulables (| null) dependiendo del estilo que prefieras.
Cómo convertir JSON a TypeScript
-
1
Pega JSON
Una sola muestra es suficiente; múltiples muestras mejoran la inferencia de nulabilidad y unión.
-
2
Elige el estilo de salida
`interface` (predeterminado), alias `type`, o interfaz de solo lectura con todos los campos marcados como `readonly`.
-
3
Elige la estrategia opcional
Marca los campos como `?` (pueden estar ausentes) o `| null` (siempre presentes, pueden ser nulos).
-
4
Copia los tipos
Pégalo en un archivo `.ts` y tendrás acceso fuertemente tipado a la respuesta de la API.
Ejemplo
Entrada:
{ "id": 1, "name": "Alice", "age": null, "tags": ["admin", "user"], "address": { "city": "Madrid" } }
Salida:
interface User {
id: number;
name: string;
age: number | null;
tags: string[];
address: Address;
}
interface Address {
city: string;
}
Mapeo de tipos
| JSON | TypeScript |
|---|---|
| cadena | string |
| entero / decimal | number |
| booleano | boolean |
| solo null | null |
| null + T | T | null (o T?) |
| arreglo de T | T[] |
| arreglo mixto | (T1 | T2)[] |
| objeto | Interfaz anidada nombrada |
| arreglo vacío | unknown[] (no se puede inferir) |
Opcional vs anulable
foo?: string, el campo puede estar ausente del objeto. Se aplica la verificación deundefined.foo: string | null, el campo está siempre presente pero puede ser explícitamente nulo.foo?: string | null, podría estar ausente O nulo.
JSON en sí no tiene undefined, pero las APIs varían en cómo señalan la ausencia. Alinea con la semántica de tu API:
- Las APIs REST típicamente omiten campos faltantes ->
?:. - GraphQL siempre devuelve cada campo solicitado ->
| null. - Algunos SDK utilizan ambos en diferentes contextos.
Tipos de unión vs literales
Si la herramienta ve el mismo campo de cadena con un pequeño conjunto de valores en las muestras ("status": "pending", "active", "archived"), puede emitir una unión de literales de cadena:
status: "pending" | "active" | "archived";
Activa “inferir uniones de literales de cadena” si deseas esto.
Errores comunes
- Inferir de una sola muestra. Cada campo se vuelve requerido; no se puede observar la nulabilidad. Pasa de 5 a 10 muestras variadas para obtener mejores tipos.
- Arreglos vacíos.
"tags": []no proporciona información de tipo, el generador emiteunknown[]. Proporciona una muestra con al menos un elemento. - Arreglos de tipos mixtos.
[1, "two", true]produce(number | string | boolean)[]. Generalmente esto significa que el JSON debería ser rediseñado en lugar de tipificado. - Claves de cadena numéricas. JSON
{"1": "a", "2": "b"}sigue siendo un objeto en TypeScript (Record<string, string>), no un arreglo. El generador maneja esto correctamente.
Preguntas frecuentes
Alinea con tu API. Las APIs REST que eliminan campos nulos quieren ?:. GraphQL, que siempre devuelve cada campo seleccionado, quiere | null. Cuando tengas dudas, T | null con sintaxis requerida es más estricta y captura más errores en tiempo de compilación.
Sí, si lo habilitas y proporcionas múltiples muestras. Un campo observado con 2-5 valores de cadena distintos en las muestras se emite como una unión literal. Más allá de ese umbral, vuelve a string.
interface para la mayoría de los casos, es abierta a extensión y TypeScript la optimiza mejor. Los alias type son útiles para uniones, intersecciones, tuplas y tipos mapeados. Para tipos derivados de JSON, cualquiera funciona; elige una convención de proyecto.
Sí. Cada objeto anidado se convierte en su propia interfaz, con nombres derivados de la clave (user.address -> Address). Para estructuras muy profundas o repetitivas, considera un esquema JSON y un generador dedicado de esquema a TS.
Herramientas relacionadas
Referencia de la tabla ASCII
Tabla ASCII completa del 0 al 127 con decimal, hex, octal, binario y referencia numérica HTML para cada carácter, incluidos los códigos de control como NUL, LF y DEL.
Referencia de caracteres HTML
Lista buscable de entidades HTML, sus códigos nombrados y numéricos, y una copia con un clic para caracteres y símbolos especiales.
Referencia de atajos de teclado
Busca los atajos predeterminados documentados de VS Code, Chrome y Bash con GNU Readline en macOS, Windows y Linux.
Generador de letras aleatorias
Genera letras aleatorias A-Z. Elige la cantidad, usa mayúsculas, minúsculas o mezcla de ambas, y aplica el resultado en juegos, consignas o clase.
Generador de Paletas de Color
Genera paletas monocromáticas, análogas, complementarias, triádicas o tetrádicas desde un color base HEX y exporta variables CSS listas para copiar.
Generador de EditorConfig
Genera un archivo .editorconfig con tu estilo y tamaño de indentación, fin de línea, charset y reglas de espacios para un formato consistente en IDEs y editores.
Herramienta disponible en otros idiomas
- JSON till TypeScript [SV]
- تحويل JSON إلى TypeScript [AR]
- JSON naar TypeScript [NL]
- JSON sang TypeScript [VI]
- JSON เป็น TypeScript [TH]
- JSONからTypeScriptへ [JA]
- JSON ke TypeScript [ID]
- JSON vers TypeScript [FR]
- JSON zu TypeScript [DE]
- JSON do TypeScript [PL]
- JSON para TypeScript [PT]
- JSON에서 TypeScript로 [KO]
- JSON в TypeScript [RU]
- JSON'dan TypeScript'e [TR]
- JSON 转 TypeScript [ZH]
- JSON to TypeScript [EN]
- JSON a TypeScript [IT]