forked frombcherny/json-schema-to-typescript
- Notifications
You must be signed in to change notification settings - Fork0
Compile JSONSchema to TypeScript type declarations
NotificationsYou must be signed in to change notification settings
stefanpl/json-schema-to-typescript
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
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:
exportinterfaceExampleSchema{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 filecompileFromFile('foo.json').then(ts=>fs.writeFileSync('foo.d.ts',ts))// or, compile a JS objectletmySchema={properties:[...]}compile(mySchema,'MySchema').then(ts=> ...)
Seeserver demo andbrowser demo for full examples.
compileFromFile andcompile 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 withconst? |
| format | boolean | true | Format code? Set this tofalse to improve performance. |
| ignoreMinAndMaxItems | boolean | false | Ignore maxItems and minItems forarray types, preventing tuples being generated. |
| style | object | { bracketSpacing: false, printWidth: 120, semi: true, singleQuote: false, tabWidth: 2, trailingComma: 'none', useTabs: false } | APrettier configuration |
| unknownAny | boolean | true | Useunknown instead ofany where possible |
| unreachableDefinitions | boolean | false | Generates code fordefinitions 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# orjson2ts foo.json> foo.d.ts# orjson2ts foo.json foo.d.ts# orjson2ts --input foo.json --output foo.d.ts# orjson2ts -i foo.json -o foo.d.ts# or (quote globs so that your shell doesn't expand them)json2ts -i'schemas/**/*.json'# orjson2ts -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 theno- prefix.
# generate code for definitions that aren't referencedjson2ts -i foo.json -o foo.d.ts --unreachableDefinitions# use single quotes and disable trailing semicolonsjson2ts -i foo.json -o foo.d.ts --style.singleQuote --no-style.semi
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 typepatternProperties(partial support)extendsrequiredproperties 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)
Prettier is known to run slowly on really big files. To skip formatting and improve performance, set theformat option tofalse.
- 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
About
Compile JSONSchema to TypeScript type declarations
Resources
Contributing
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
No packages published
Languages
- TypeScript99.9%
- JavaScript0.1%