$ npm install json-ts
npm install -g json-ts
Automatically generate Typescript Definition files or Flow types from JSON input.
Use it via the API, CLI, or Website
Feature | json-ts (this library) | json-to-ts | json2ts |
---|---|---|---|
simple literal types (number, string etc) | YES | YES | YES |
array type, all elements of same kind | YES | YES | YES |
merge multiple json files | YES (cli, v1.6 & above) | NO | NO |
optional members | YES | YES | NO |
array union types | YES | YES | NO |
correct handling of top-level values (strings, arrays, arrays of objects numbers etc) | YES | NO | NO |
recursive data structures (see here) | YES | NO | NO |
nested type literals (to account for invalid interface names) | YES | YES | NO |
output @flow types | YES | NO | NO |
Website | YES | YES | YES |
CLI | YES | NO | NO |
API | YES | YES | NO |
# install
npm install -g json-ts
# run against a single JSON file
json-ts dir/myfile.json
# run against multiple single JSON files (interfaces will be merged)
json-ts api/resp1.json api/resp2.json
Note: only stdin (which requires the --stdin flag) & filepaths are supported right now. Later I will add support for Windows, reading data from network requests etc.
## piping via stdin
curl https://jsonplaceholder.typicode.com/posts/1 | json-ts --stdin
## reading single json file from disk
json-ts my-file.json
## reading multiple json files from disk
json-ts my-file.json my-other-file.json
... produces the following:
interface IRootObject {
userId: number;
id: number;
title: string;
body: string;
}
npm install json-ts --save-dev
const { json2ts } = require('json-ts');
const json = `
{
"name": "Shane"
}
`;
console.log(json2ts(json))
... produces the following:
interface IRootObject {
name: string;
}
For more examples, see the Tests
# usage
json-ts <filename> --namespace <namespace_name>
# example
json-ts data/my-file.json --namespace API
# usage
json-ts <filename> --flow
# example
json-ts data/my-file.json --flow
I
prefix on interface names# usage
json-ts <filename> --prefix <prefix_string>
# example (remove prefix)
json-ts data/my-file.json --prefix ""
RootObject
name of the top-level interface# usage
json-ts <filename> --rootName <rootname_string>
# example
json-ts data/my-file.json --rootName "Product"
I
prefix on interface names--flow
nums: [1, "2"] -> nums: number|string[]
(already works for complex objects) declare namespace Projects {
export interface ILoc {
lat: number;
lng: number;
}
...
}
--stdin
flag)© 2010 - cnpmjs.org x YWFE | Home | YWFE