JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 5710
  • Score
    100M100P100Q116597F

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

Build Status

npm install -g json-ts

Automatically generate Typescript Definition files or Flow types from JSON input.

Use it via the API, CLI, or Website

json-ts

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)