Package Exports
- json-ts
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (json-ts) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
npm install -g json-ts
Automatically generate Typescript Definition files or Flow types from JSON input.
Use it via the API, CLI, or Website
How does json-ts stack up against the competition?
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 |
optional members | YES | YES | NO |
array union types | YES | NO | NO |
recursive data structures (see here) | YES | NO | NO |
nested type literals (to account for invalid interface names) | YES | NO | NO |
output @flow types | YES | NO | NO |
Website | YES | NO | YES |
CLI | YES | NO | NO |
API | YES | YES | NO |
Quick-start
# install
npm install -g json-ts
# run against JSON file
json-ts dir/myfile.json
Usage (CLI)
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 json from disk
json-ts my-file.json
... produces the following:
interface IRootObject {
userId: number;
id: number;
title: string;
body: string;
}
Usage (API)
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
Options
- namespace: string - if provided, interfaces will be wrapped in a namespace (see below)
# usage json-ts <filename> --namespace <namespace_name> # example json-ts data/my-file.json --namespace API
- flow: boolean - output types in Flow format.
# usage json-ts <filename> --flow # example json-ts data/my-file.json --flow
- prefix: string - override the
I
prefix on interface names# usage json-ts <filename> --prefix <prefix_string> # example (remove prefix) json-ts data/my-file.json --prefix ""
- rootName: string - override the
RootObject
name of the top-level interface# usage json-ts <filename> --rootName <rootname_string> # example json-ts data/my-file.json --rootName "Product"
TODO:
options
- Allow choice of
I
prefix on interface names - Allow naming of RootObject
- Allow choice of spaces/tabs
Core
- support array types
- support boolean types
- support null types
- output types for Flow via
--flow
- PascalCase as default for all interface names
- de-dupe interfaces (it's dumb atm, POC)
- de-dupe interfaces where propname differs, but members are the same
- merge interfaces by creating union types for members
- union types for array that contain mixed literal types:
nums: [1, "2"] -> nums: number|string[]
(already works for complex objects) - quoted member names when needed
- handle invalid name for interface
- support type alias declarations
- Use Typescript factory methods/printer for output
- Allow wrapping in namespace: eg:
declare namespace Projects { export interface ILoc { lat: number; lng: number; } ... }
CLI
- CLI tool to accept stdin (with
--stdin
flag) - CLI tool to accept json file as input
- CLI tool to accept URL as input (for validating against remote API)
- configurable output (filename/stdout etc)