Negatively Proportional Model
    Wondering what’s next for npm?Check out our public roadmap! »

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

    10.1.4 • Public • Published

    json-schema-to-typescript Build Status npm mit

    Compile json schema to typescript typings

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

    Output:

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

    Installation

    # Using Yarn:
    yarn add json-schema-to-typescript
    
    # Or, using NPM:
    npm install json-schema-to-typescript --save

    Usage

    import { compile, compileFromFile } from 'json-schema-to-typescript'
    
    // compile from file
    compileFromFile('foo.json')
      .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.

    Options

    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?
    format boolean true Format code? Set this to false to improve performance.
    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
    unknownAny boolean true Use unknown instead of any where possible
    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

    CLI

    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
    # or (quote globs so that your shell doesn't expand them)
    json2ts -i 'schemas/**/*.json'
    # or
    json2ts -i schemas/ -o types/

    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

    Tests

    npm test

    Features

    • [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

    Custom schema properties:

    • tsType: Overrides the type that's generated from the schema. Useful for forcing a type to any or when using non-standard JSON schema extensions (eg).
    • tsEnumNames: Overrides the names used for the elements in an enum. Can also be used to create string enums (eg).

    Not expressible in TypeScript:

    FAQ

    JSON-Schema-to-TypeScript is crashing on my giant file. What can I do?

    Prettier is known to run slowly on really big files. To skip formatting and improve performance, set the format option to false.

    Further Reading

    Who uses JSON-Schema-to-TypeScript?

    Install

    npm i json-schema-to-typescript

    DownloadsWeekly Downloads

    127,966

    Version

    10.1.4

    License

    MIT

    Unpacked Size

    200 kB

    Total Files

    62

    Last publish

    Collaborators

    • avatar