Imagine that you are trying to integrate an HTTP API with a TypeScript client. Sometimes, SDKs and documentation are available, but other times, you are in the dark.
Let's imagine that we are fetching the following JSON file:
https://gist.githubusercontent.com/robertcedwards/8574169/raw/90c2d25d3ad5fd0b5f3a56b523e409ce7e0e9480/sample_nested.json
The URL above returns the following JSON:
{ "coffee": { "region": [ {"id":1,"name":"John Doe"}, {"id":2,"name":"Don Joeh"} ], "country": {"id":2,"company":"ACME"} }, "brewing": { "region": [ {"id":1,"name":"John Doe"}, {"id":2,"name":"Don Joeh"} ], "country": {"id":2,"company":"ACME"} } }
Having to write TypeScript type definitions by hand for a JSON response like this can be time-consuming, this is why I have released a command line utility to save some time. You can call it using npx
as follows:
npx dts-from-json <URL>
You just need to replace <URL>
with a URL that returns a JSON response:
npx dts-from-json https://gist.githubusercontent.com/robertcedwards/8574169/raw/90c2d25d3ad5fd0b5f3a56b523e409ce7e0e9480/sample_nested.json
In less than 1 second, you will see the following in your terminal:
interface SampleNested { coffee: Coffee; brewing: Coffee; } interface Coffee { region: Region[]; country: Country; } interface Country { id: number; company: string; } interface Region { id: number; name: string; }
If you wish to save the file, you just need to redirect stdout
to a file:
npx dts-fromjson <URL> > types.d.ts
Here are a few JSON files that you can use to test it:
You can also use local files by passing a path instead of a URL:
npx dts-fromjson <local-path-to-json-file>
The dts-from-json
module is available at npm. While this tool might not be perfect it can definitely save you some time.
I hope you enjoy it 🤓 Thanks for reading 💛
Top comments (0)