typescript-json-schema
Version:
typescript-json-schema generates JSON Schema files from your Typescript sources
118 lines (86 loc) • 4.3 kB
Markdown
[](https://www.npmjs.com/package/typescript-json-schema) [](https://travis-ci.org/YousefED/typescript-json-schema)
Generate json-schemas from your Typescript sources.
* Compiles your Typescript program to get complete type information.
* Translates required properties, extends, annotation keywords, property initializers as defaults. You can find examples for these features in the [test examples](https://github.com/YousefED/typescript-json-schema/tree/master/test/programs).
* Install with `npm install typescript-json-schema -g`
* Generate schema from a typescript type: `typescript-json-schema project/directory/tsconfig.json fully.qualified.type.to.generate`
In case no tsconfig.json is available for your project, you can directly specify the .ts files (this in this case we use some built-in compiler presets):
* Generate schema from a typescript type: `typescript-json-schema "project/directory/**/*.ts" fully.qualified.type.to.generate`
```
Usage: node typescript-json-schema.js <path-to-typescript-files-or-tsconfig> <type>
Options:
--refs Create shared ref definitions. [boolean] [default: true]
--aliasRefs Create shared ref definitions for the type aliases. [boolean] [default: false]
--topRef Create a top-level ref definition. [boolean] [default: false]
--titles Creates titles in the output schema. [boolean] [default: false]
--defaultProps Create default properties definitions. [boolean] [default: false]
--noExtraProps Disable additional properties in objects by default. [boolean] [default: false]
--propOrder Create property order definitions. [boolean] [default: false]
--required Create required array for non-optional properties. [boolean] [default: false]
--strictNullChecks Make values non-nullable by default. [boolean] [default: false]
--out, -o The output file, defaults to using stdout
```
### Programmatic use
```ts
import {resolve} from "path";
import {CompilerOptions} from "typescript";
import * as TJS from "typescript-json-schema";
// optionally pass argument to schema generator
const settings: TJS.PartialArgs = {
generateRequired: true
};
// optionally pass ts compiler options
compilerOptions: CompilerOptions = {
strictNullChecks: true
}
const program = TJS.getProgramFromFiles([resolve("my-file.ts")], compilerOptions);
// We can either get the schema for one file and one type...
const schema = TJS.generateSchema(program, "MyType", settings);
// ... or a generator that lets us incrementally get more schemas
const generator = TJS.buildGenerator(program, settings);
// all symbols
const symbols = generator.getUserSymbols();
// Get symbols for different types from generator.
generator.getSchemaForSymbol("MyType");
generator.getSchemaForSymbol("AnotherType");
```
The schema generator converts annotations to JSON schema properties.
For example
```ts
export interface Shape {
/**
* The size of the shape.
*
* @minimum 0
* @TJS-type integer
*/
size: number;
}
```
will be translated to
```json
{
"$ref": "#/definitions/Shape",
"$schema": "http://json-schema.org/draft-04/schema#",
"definitions": {
"Shape": {
"properties": {
"size": {
"description": "The size of the shape.",
"minimum": 0,
"type": "integer"
}
},
"type": "object"
}
}
}
```
Note that we needed to use `@TJS-type` instead of just `@type` because of an [issue with the typescript compiler](https://github.com/Microsoft/TypeScript/issues/13498).
Inspired and builds upon [Typson](https://github.com/lbovet/typson/), but typescript-json-schema is compatible with more recent Typescript versions. Also, since it uses the Typescript compiler internally, more advanced scenarios are possible.