Quiero convertir un objeto js en una versión mecanografiada (estamos refactorizando el código) :( Pero no entiendo cómo migrar un objeto JS JSON a un formato TS correcto. Por ejemplo, tenemos un objeto JS como este:
JS Object: { "filter": { "price": { "$gte": 10, "$lte": 100 }, "symbol": "appl" }, "sort": { "createdAt": -1 } } Entonces, es fácil en el código js que declaremos params = {} y podamos insertar params.filter[price] = .... .
Sin embargo, si queremos hacerlo en Typescript, el compilador se quejará de que necesitamos determinar el tipo, y es difícil porque, como puede ver, el "valor" puede ser una cadena, un int u otro objeto.
¿Tienes alguna idea al respecto? Súper gracias!!!!!
No es necesario crear un tipo/interfaz para analizar JSON:
const json = `{ "filter": { "price": { "$gte": 10, "$lte": 100 }, "symbol": "appl" }, "sort": { "createdAt": -1 } }` const data = JSON.parse(json) console.log(data)Si lo desea, también puede crear una interfaz y asignarle los datos analizados. Sin embargo, tenga en cuenta que esto no valida que los datos analizados coincidan con el tipo/interfaz (podría ser cualquier dato JSON arbitrario y se asignaría a la variable de resultado, pero TypeScript solo le permitiría acceder a los miembros que existen en la interfaz .
interface Data { filter: { price: { $gte: number $lte: number } symbol: string } sort: { createdAt: number } } const json = `{ "filter": { "price": { "$gte": 10, "$lte": 100 }, "symbol": "appl" }, "sort": { "createdAt": -1 } }` const data: Data = JSON.parse(json) console.log(data) console.log(data.filter.symbol)Si desea un tipo de objeto específico, intente usar VSCode Paste JSON as Code o este sitio web que generará una interface mecanografiada a partir de su objeto http://json2ts.com/ .
Puede usar las interfaces de TypeScript para hacerlo. Puede generar fácilmente TS usando sitios web o extensiones como https://app.quicktype.io/
export interface Pokedex { filter: Filter; sort: Sort; } export interface Filter { price: { [key: string]: number }; symbol: string; } export interface Sort { createdAt: number; } { "filter": { "price": { "$gte": 10, "$lte": 100 }, "symbol": "appl" }, "sort": { "createdAt": -1 } }