North Pittsburgh Meatpackers

    TypeScript icon, indicating that this package has built-in type declarations

    11.0.3 • Public • Published

    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
    additionalProperties boolean true Default value for additionalProperties, when it is not explicitly set
    bannerComment string "/* eslint-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.
    maxItems number 20 Maximum number of unioned tuples to emit when representing bounded-size array types, before falling back to emitting unbounded arrays. Increase this to improve precision of emitted types, decrease it to improve performance, or set it to -1 to ignore maxItems.
    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 $defs 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
    # 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


    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

    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:


    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?


    npm i json-schema-to-typescript

    DownloadsWeekly Downloads






    Unpacked Size

    2.37 MB

    Total Files


    Last publish


    • bcherny