json-schema-to-typescript-cli
TypeScript icon, indicating that this package has built-in type declarations

3.0.0 • Public • Published

json-schema-to-typescript Build Status npm mit

Compile json schema to typescript typings

[In Beta]: Bug reports appreciated!

Example

Input:

{
  "title": "Example Schema",
  "type": "object",
  "properties": {
    "firstName": {
      "type": "string"
    },
    "lastName": {
      "type": "string"
    },
    "age": {
      "description": "Age in years",
      "type": "integer",
      "minimum": 0
    },
    "hairColor": {
      "enum": ["black", "brown", "blue"],
      "type": "string"
    }
  },
  "required": ["firstName", "lastName"]
}

Output:

export interface ExampleSchema {
  firstName: string;
  lastName: string;
  /**
   * Age in years
   */
  age?: number;
  hairColor?: "black" | "brown" | "blue";
}

Installation

npm install json-schema-to-typescript

or, to install the json-schema-to-typescript CLI utility:

npm install -g json-schema-to-typescript

Usage

API

import {compileFromFile} from 'json-schema-to-typescript'
 
fs.writeFileSync('dist/foo.d.ts', await compileFromFile('src/foo.json'))

CLI

$ json-schema-to-typescript src/foo.json
... snipped output here, on stdout ...
$ json-schema-to-typescript src/foo.json dist/foo.d.ts
$

See /example for a fully working demo.

Tests

npm test

Todo

  • title => interface
  • Primitive types:
    • array
    • homogeneous array
    • boolean
    • integer
    • number
    • null
    • object
    • string
    • homogeneous enum
    • heterogeneous enum
  • Non/extensible interfaces
  • Custom JSON-schema extensions
  • Nested properties
  • Schema definitions
  • Schema references
  • Local (filesystem) schema references
  • External (network) schema references
  • Add support for running in browser
  • default interface name
  • infer unnamed interface name from filename
  • anyOf ("union")
  • allOf ("intersection")
  • additionalProperties of type
  • extends
  • required properties on objects (eg)
  • validateRequired (eg)
  • literal objects in enum (eg)
  • referencing schema by id (eg)
  • clean up + refactor code

Not expressible in TypeScript:

  • dependencies (single, multiple)
  • divisibleBy (eg)
  • format (eg)
  • multipleOf (eg)
  • maximum (eg)
  • minimum (eg)
  • maxItems (eg)
  • minItems (eg)
  • maxProperties (eg)
  • minProperties (eg)
  • not/disallow
  • oneOf ("xor", use anyOf instead)
  • pattern (string, regex)
  • patternProperties (eg)
  • uniqueItems (eg)

Further Reading

Package Sidebar

Install

npm i json-schema-to-typescript-cli

Weekly Downloads

5

Version

3.0.0

License

MIT

Last publish

Collaborators

  • joshuagross