Fork of bcherny/json-schema-to-typescript targeting browser only. Removed all cli, node, and file-system dependencies.
Compile json schema to typescript typings
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";
}# Using Yarn:
yarn add json-schema-to-typescript
# Or, using NPM:
npm install json-schema-to-typescript --saveimport { compile } from 'json-schema-to-typescript'
// 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 |
| 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. |
| 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 |
npm test
-
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
-
allOf("intersection") -
anyOf("union") -
oneOf(treated likeanyOf) -
maxItems(eg) -
minItems(eg) -
additionalPropertiesof type -
patternProperties(partial support) -
extends -
requiredproperties on objects (eg) -
validateRequired(eg) - literal objects in enum (eg)
- referencing schema by id (eg)
- custom typescript types via
tsType
tsType: Overrides the type that's generated from the schema. Useful for forcing a type toanyor 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).
dependencies(single, multiple)divisibleBy(eg)format(eg)multipleOf(eg)maximum(eg)minimum(eg)maxProperties(eg)minProperties(eg)not/disallowoneOf("xor", useanyOfinstead)pattern(string, regex)uniqueItems(eg)
- JSON-schema spec: https://tools.ietf.org/html/draft-zyp-json-schema-04
- JSON-schema wiki: https://github.com/json-schema/json-schema/wiki
- JSON-schema test suite: https://github.com/json-schema/JSON-Schema-Test-Suite/blob/node
- TypeScript spec: https://github.com/Microsoft/TypeScript/blob/master/doc/spec.md