Qué hace esta herramienta
Una muestra JSON pasa a ser tipos de TypeScript, una interfaz con nombre por objeto.
{ "id": 1, "name": "Ada", "address": { "city": "Paris" } }
export interface Root {
id: number;
name: string;
address: Address;
}
export interface Address {
city: string;
}
interface o type, exportado o no, y el nombre de la raíz: los ajustas tú.
Una lista en la raíz ya tiene nombre
Un array de objetos es la muestra más corriente que hay: es lo que devuelve un endpoint de lista. La salida daba solo la interfaz del elemento:
export interface UsersItem {
id: number;
}
y el nombre raíz que habías escrito no iba a ninguna parte. La lista misma ya tiene nombre:
export type Users = UsersItem[];
export interface UsersItem {
id: number;
}
Era un defecto, encontrado al escribir esta página y corregido. Los generadores Zod e io-ts de este sitio ya emitían su raíz; TypeScript no.
Mismo nombre, forma distinta
Los nombres de tipo vienen de las claves: dos ramas pueden querer Address las dos. Cuando las formas difieren, la segunda pasa a Address2 en vez de fundirse en un tipo que no encaja con ninguna. Cuando las formas son idénticas, se comparte una sola definición: un Address referenciado dos veces.
Lo que una muestra no puede decir
Nada se marca opcional, y es deliberado: una clave vista una vez dice que puede aparecer, no que aparezca siempre. "nickname": null da nickname: null, porque es todo lo que contiene la muestra; amplíalo tú a string | null cuando lo sepas.
Un identificador de veinte cifras se tipa number, y un número de JavaScript no lo contiene: pasado 2^53 el valor cambia al analizarse. El tipo no miente sobre la muestra, hereda un límite del lenguaje; si el campo es un identificador copo de nieve, ponlo en string y mantenlo fuera de JSON.parse.
Una clave repetida se rechaza
{"a": 1, "a": "x"} daba a: string, ganando la última ocurrencia en silencio. Dos valores, una clave, ninguna forma de decir qué tipo tiene el campo: la conversión se detiene ahora y declara ambiguo el documento. Es la misma respuesta que el validador JSON de aquí ya daba al mismo documento.
Privado por diseño
Todo se ejecuta localmente en tu navegador con JavaScript. Tus datos nunca se suben a un servidor, lo que hace que la herramienta sea segura para contenido sensible y funcione sin conexión.