bcherny / json-schema-to-typescript
- четверг, 27 апреля 2017 г. в 03:12:29
TypeScript
Compile JSONSchema to TypeScript typings
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"
}
},
"required": ["firstName", "lastName"]
}
Output:
export interface ExampleSchema {
firstName: string;
lastName: string;
/**
* Age in years
*/
age?: number;
hairColor?: ("black" | "brown" | "blue");
}
npm install json-schema-to-typescript --save
import { compile, compileFromFile } from 'json-schema-to-typescript'
// compile from file
compileFromFile('foo.json')
.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 | note |
---|---|---|
cwd | string | Root directory for resolving $ref s |
declareReferenced | boolean | Declare schemas referenced via $ref ? |
enableConstEnums | boolean | Prepend enums with const ? |
enableTrailingSemicolonForTypes | boolean | |
enableTrailingSemicolonForEnums | boolean | |
enableTrailingSemicolonForInterfaceProperties | boolean | |
enableTrailingSemicolonForInterfaces | boolean | |
indentWith | string | Tabs or spaces? |
A simple 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
npm test
title
=> interface
allOf
("intersection")anyOf
("union")oneOf
(treated like anyOf
)additionalProperties
of typeextends
required
properties on objects (eg)validateRequired
(eg)dependencies
(single, multiple)divisibleBy
(eg)format
(eg)multipleOf
(eg)maximum
(eg)minimum
(eg)maxItems
(eg)minItems
(eg)maxProperties
(eg)minProperties
(eg)not
/disallow
oneOf
("xor", use anyOf
instead)pattern
(string, regex)patternProperties
(eg)uniqueItems
(eg)