An utility to generate Flow, TypeScript, Rust Serde Struct and Scala Case Class from JSON.
Note : It also detects optional properties for TS/Flow from a Collection.
Installation
npm install transform-json-types
The online REPL is available at
Basic Usage
import transform from "transform-json-types" const json = `{ "hello": "world" }` console.log(transform(json, { lang: "typescript" })) // interface RootJson { // hello: string // } console.log(transform(json, { lang: "rust-serde" })) // #[derive(Serialize, Deserialize)] // struct RootInterface { // hello: String, // }
Usage with sarcastic and Flow
//@flow import is, { type AssertionType } from "sarcastic" // Interface generated by "transform-json-types" const PersonInterface = is.shape({ name: is.string, age: is.number }); // Use it like this: type Person = AssertionType<typeof PersonInterface> const assertPerson = (val: mixed): Person => is(val, PersonInterface, "Person") const person = assertPerson(JSON.parse('{"name":"Giulio","age":43}')))
Usage with io-ts and TypeScript
import * as t from "io-ts" // Interface generated by "transform-json-types" const PersonInterface = t.type({ name: t.string, age: t.number }); // Use it like this: PersonInterface.decode(JSON.parse('{"name":"Giulio","age":43}')) // => Right({name: "Giulio", age: 43}) PersonInterface.decode(JSON.parse('{"name":"Giulio"}')) // => Left([...]) type Person = t.TypeOf<typeof Person>
Usage with runtypes and TypeScript
import * as rt from "runtypes" // Interface generated by "transform-json-types" const PersonInterface = rt.Record({ name: rt.String, age: rt.Number }); // Use it like this: PersonInterface.check(JSON.parse('{"name":"Giulio","age":43}')) // => {name: "Giulio", age: 43}
API
transform(json, [options])
json : String | JSON
You can pass a parsed JSON or a stringified JSON.
Options
| Option | Default | Description |
|---|---|---|
| lang | 'flow' | One of flow, typescript, scala, sarcastic, io-ts or rust-serde |
| rustCase | 'camelCase' | either snakeCase or camelCase |
Inspirations
Majority of the inspiration was from xperiment's json2dts
Development
- Fork and clone the repo.
- Create a new branch.
- Create features or fix bugs.
- Write test to improve stability.
- Open a PR.
License
MIT @ Ritesh Kumar
Contributors
Thanks goes to these wonderful people (emoji key):
Ritesh Kumar 💻 📖 🤔 |
Florian Gilcher 💻 |
Pedro Casaubon 💻 🤔 |
stereobooster 💻 |
Will Fuqua 📖 |
Simen A. W. Olsen 💻 |
This project follows the all-contributors specification. Contributions of any kind welcome!