forked frombcherny/json-schema-to-typescript
- Notifications
You must be signed in to change notification settings - Fork0
Compile JSONSchema to TypeScript type declarations
License
NotificationsYou must be signed in to change notification settings
iteufel/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 |
|---|---|---|---|
| additionalProperties | boolean | true | Default value foradditionalProperties, 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 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. |
| 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 ignoremaxItems. |
| strictIndexSignatures | boolean | false | Append all index signatures with| undefined so that they are strictly typed. |
| 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 for$defs that aren't referenced by the schema. |
| $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
deprecatedallOf("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
License
Contributing
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Releases
No releases published
Packages0
No packages published
Languages
- TypeScript99.9%
- JavaScript0.1%