compile json schema to typescript typings
Last updated 5 months ago by mike-marcacci .
MIT · Repository · Bugs · Original npm · Tarball · package.json
$ cnpm install @mike-marcacci/json-schema-to-typescript 
SYNC missed versions from official npm registry.

json-schema-to-typescript Build Status npm mit

Compile json schema to typescript typings



  "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"
  "additionalProperties": false,
  "required": ["firstName", "lastName"]


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


# Using Yarn:
yarn add json-schema-to-typescript

# Or, using NPM:
npm install json-schema-to-typescript --save


import { compile, compileFromFile } from 'json-schema-to-typescript'

// compile from file
  .then(ts => fs.writeFileSync('foo.d.ts', ts))

// or, compile a JS object
let mySchema = {
  properties: [...]
compile(mySchema, 'MySchema')
  .then(ts => ...)

See server demo and browser demo for full examples.


compileFromFile and compile accept options as their last argument (all keys are optional):

key type default description
bannerComment string "/* tslint:disable */\n/**\n* This file was automatically generated by json-schema-to-typescript.\n* DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,\n* and run json-schema-to-typescript to regenerate this file.\n*/" Disclaimer comment prepended to the top of each generated file
cwd string process.cwd() Root directory for resolving $refs
declareExternallyReferenced boolean true Declare external schemas referenced via $ref?
enableConstEnums boolean true Prepend enums with const?
ignoreMinAndMaxItems boolean false Ignore maxItems and minItems for array types, preventing tuples being generated.
style object { bracketSpacing: false, printWidth: 120, semi: true, singleQuote: false, tabWidth: 2, trailingComma: 'none', useTabs: false } A Prettier configuration
unreachableDefinitions boolean false Generates code for definitions that aren't referenced by the schema.
strictIndexSignatures boolean false Append all index signatures with | undefined so that they are strictly typed.
$refOptions object {} $RefParser Options, used when resolving $refs


A CLI utility is provided with this package.

cat foo.json | json2ts > foo.d.ts
# or
json2ts foo.json > foo.d.ts
# or
json2ts foo.json foo.d.ts
# or
json2ts --input foo.json --output foo.d.ts
# or
json2ts -i foo.json -o foo.d.ts

You can pass any of the options described above (including style options) as CLI flags. Boolean values can be set to false using the no- prefix.

# generate code for definitions that aren't referenced
json2ts -i foo.json -o foo.d.ts --unreachableDefinitions
# use single quotes and disable trailing semicolons
json2ts -i foo.json -o foo.d.ts --style.singleQuote --no-style.semi

The CLI supports directory of definitions as well. It supports directory paths, glob patterns, and output directories.

Example 1: Directory of type definitions to an output directory

Input Directory

schemas /
 | a.json
 | b.json
json2ts -i schemas/ -o types/

Output Directory

types /
 | a.d.ts
 | b.d.ts

Example 2: Directory to pipe out Input Directory

schemas /
 | a.json
 | b.json
json2ts -i schemas/

Example 3: Nested input directory mapped to nested output Input Directory

schemas /
  foo /
    | a.json
  bar /
    | b.json
  fuzz /
    buzz /
json2ts -i schemas/ -o types/

Output Directory

types /
  foo /
    | a.d.ts
  bar /
    | b.d.ts
  fuzz /
    buzz /


npm test


  • [x] title => interface
  • [x] Primitive types:
    • [x] array
    • [x] homogeneous array
    • [x] boolean
    • [x] integer
    • [x] number
    • [x] null
    • [x] object
    • [x] string
    • [x] homogeneous enum
    • [x] heterogeneous enum
  • [x] Non/extensible interfaces
  • [ ] Custom JSON-schema extensions
  • [x] Nested properties
  • [x] Schema definitions
  • [x] Schema references
  • [x] Local (filesystem) schema references
  • [x] External (network) schema references
  • [x] Add support for running in browser
  • [x] default interface name
  • [x] infer unnamed interface name from filename
  • [x] allOf ("intersection")
  • [x] anyOf ("union")
  • [x] oneOf (treated like anyOf)
  • [x] maxItems (eg)
  • [x] minItems (eg)
  • [x] additionalProperties of type
  • [x] patternProperties (partial support)
  • [x] extends
  • [x] required properties on objects (eg)
  • [ ] validateRequired (eg)
  • [x] literal objects in enum (eg)
  • [x] referencing schema by id (eg)
  • [x] custom typescript types via tsType

Not expressible in TypeScript:

Further Reading

Projects That Use JSON-Schema-to-TypeScript

Current Tags

  • 8.4.0                                ...           latest (5 months ago)

2 Versions

  • 8.4.0                                ...           5 months ago
  • 8.3.0                                ...           6 months ago
Maintainers (1)
Today 0
This Week 0
This Month 0
Last Day 0
Last Week 0
Last Month 0
Dependencies (15)
Dev Dependencies (18)
Dependents (0)

Copyright 2014 - 2016 © taobao.org |