https://github.com/xiag-ag/typescript-to-json-schema เวอร์ชันขยาย
แรงบันดาลใจจาก YousefED/typescript-json-schema
นี่คือรายการความแตกต่าง:
typeChecker.getTypeAtLocation()
(ดังนั้นอาจเก็บนามแฝงประเภทที่ถูกต้องไว้)definitions
ในสคีมา JSON โครงการนี้เกิดขึ้นได้โดยชุมชนของผู้มีส่วนร่วม เรายินดีรับความช่วยเหลือทุกรูปแบบ (ปัญหา โค้ด เอกสาร ตัวอย่าง การทดสอบ...) โปรดอ่านจรรยาบรรณของเรา
เรียกใช้ตัวสร้างสคีมาด้วย npx:
npx ts-json-schema-generator --path ' my/project/**/*.ts ' --type ' My.Type.Name '
หรือติดตั้งแพ็คเกจแล้วรัน
npm install --save ts-json-schema-generator
./node_modules/.bin/ts-json-schema-generator --path ' my/project/**/*.ts ' --type ' My.Type.Name '
โปรดทราบว่าแพลตฟอร์มที่แตกต่างกัน (เช่น Windows) อาจใช้ตัวแยกเส้นทางที่แตกต่างกัน ดังนั้นคุณอาจต้องปรับคำสั่งด้านบน
โปรดทราบว่าคุณต้องอ้างอิงเส้นทางด้วย *
มิฉะนั้นเชลล์จะขยายเส้นทางและดังนั้นจะส่งผ่านเส้นทางแรกไปยังตัวสร้างเท่านั้น
ตามค่าเริ่มต้น ตัวสร้างบรรทัดคำสั่งจะใช้ไฟล์ tsconfig.json
ในไดเร็กทอรีการทำงานปัจจุบัน หรือไดเร็กทอรีพาเรนต์แรกที่มีไฟล์ tsconfig.json
จนถึงระดับรากของระบบไฟล์ หากคุณต้องการใช้ไฟล์ tsconfig.json
อื่น คุณสามารถใช้ตัวเลือก --tsconfig
โดยเฉพาะอย่างยิ่ง หากคุณต้องการใช้ตัวเลือกการคอมไพล์ที่แตกต่างกันสำหรับประเภท คุณอาจต้องการสร้างไฟล์ tsconfig.json
แยกต่างหากสำหรับการสร้างสคีมาเท่านั้น
-p, --path <path> Source file path
-t, --type <name> Type name
-i, --id <name> $id for generated schema
-f, --tsconfig <path> Custom tsconfig.json path
-e, --expose <expose> Type exposing (choices: "all", "none", "export", default: "export")
-j, --jsDoc <extended> Read JsDoc annotations (choices: "none", "basic", "extended", default: "extended")
--markdown-description Generate `markdownDescription` in addition to `description`.
--functions <functions> How to handle functions. `fail` will throw an error. `comment` will add a comment. `hide` will treat the function like a NeverType or HiddenType.
(choices: "fail", "comment", "hide", default: "comment")
--minify Minify generated schema (default: false)
--unstable Do not sort properties
--strict-tuples Do not allow additional items on tuples
--no-top-ref Do not create a top-level $ref definition
--no-type-check Skip type checks to improve performance
--no-ref-encode Do not encode references
-o, --out <file> Set the output file (default: stdout)
--validation-keywords [value] Provide additional validation keywords to include (default: [])
--additional-properties Allow additional properties for objects with no index signature (default: false)
-V, --version output the version number
-h, --help display help for command
// main.js
const tsj = require ( "ts-json-schema-generator" ) ;
const fs = require ( "fs" ) ;
/** @type {import('ts-json-schema-generator/dist/src/Config').Config} */
const config = {
path : "path/to/source/file" ,
tsconfig : "path/to/tsconfig.json" ,
type : "*" , // Or <type-name> if you want to generate schema for that one type only
} ;
const outputPath = "path/to/output/file" ;
const schema = tsj . createGenerator ( config ) . createSchema ( config . type ) ;
const schemaString = JSON . stringify ( schema , null , 2 ) ;
fs . writeFile ( outputPath , schemaString , ( err ) => {
if ( err ) throw err ;
} ) ;
รันตัวสร้างสคีมาผ่าน node main.js
การขยายการจัดรูปแบบในตัวสามารถทำได้โดยการสร้างตัวจัดรูปแบบที่กำหนดเองและเพิ่มลงในตัวจัดรูปแบบหลัก:
// my-function-formatter.ts
import { BaseType , Definition , FunctionType , SubTypeFormatter } from "ts-json-schema-generator" ;
import ts from "typescript" ;
export class MyFunctionTypeFormatter implements SubTypeFormatter {
// You can skip this line if you don't need childTypeFormatter
public constructor ( private childTypeFormatter : TypeFormatter ) { }
public supportsType ( type : BaseType ) : boolean {
return type instanceof FunctionType ;
}
public getDefinition ( type : FunctionType ) : Definition {
// Return a custom schema for the function property.
return {
type : "object" ,
properties : {
isFunction : {
type : "boolean" ,
const : true ,
} ,
} ,
} ;
}
// If this type does NOT HAVE children, generally all you need is:
public getChildren ( type : FunctionType ) : BaseType [ ] {
return [ ] ;
}
// However, if children ARE supported, you'll need something similar to
// this (see src/TypeFormatter/{Array,Definition,etc}.ts for some examples):
public getChildren ( type : FunctionType ) : BaseType [ ] {
return this . childTypeFormatter . getChildren ( type . getType ( ) ) ;
}
}
import { createProgram , createParser , SchemaGenerator , createFormatter } from "ts-json-schema-generator" ;
import { MyFunctionTypeFormatter } from "./my-function-formatter.ts" ;
import fs from "fs" ;
const config = {
path : "path/to/source/file" ,
tsconfig : "path/to/tsconfig.json" ,
type : "*" , // Or <type-name> if you want to generate schema for that one type only
} ;
// We configure the formatter an add our custom formatter to it.
const formatter = createFormatter ( config , ( fmt , circularReferenceTypeFormatter ) => {
// If your formatter DOES NOT support children, e.g. getChildren() { return [] }:
fmt . addTypeFormatter ( new MyFunctionTypeFormatter ( ) ) ;
// If your formatter DOES support children, you'll need this reference too:
fmt . addTypeFormatter ( new MyFunctionTypeFormatter ( circularReferenceTypeFormatter ) ) ;
} ) ;
const program = createProgram ( config ) ;
const parser = createParser ( program , config ) ;
const generator = new SchemaGenerator ( program , parser , formatter , config ) ;
const schema = generator . createSchema ( config . type ) ;
const outputPath = "path/to/output/file" ;
const schemaString = JSON . stringify ( schema , null , 2 ) ;
fs . writeFile ( outputPath , schemaString , ( err ) => {
if ( err ) throw err ;
} ) ;
คล้ายกับการจัดรูปแบบที่กำหนดเอง การขยายการแยกวิเคราะห์ในตัวทำงานในลักษณะเดียวกัน:
// my-constructor-parser.ts
import { Context , StringType , ReferenceType , BaseType , SubNodeParser } from "ts-json-schema-generator" ;
// use typescript exported by TJS to avoid version conflict
import ts from "ts-json-schema-generator" ;
export class MyConstructorParser implements SubNodeParser {
supportsNode ( node : ts . Node ) : boolean {
return node . kind === ts . SyntaxKind . ConstructorType ;
}
createType ( node : ts . Node , context : Context , reference ?: ReferenceType ) : BaseType | undefined {
return new StringType ( ) ; // Treat constructors as strings in this example
}
}
import { createProgram , createParser , SchemaGenerator , createFormatter } from "ts-json-schema-generator" ;
import { MyConstructorParser } from "./my-constructor-parser.ts" ;
import fs from "fs" ;
const config = {
path : "path/to/source/file" ,
tsconfig : "path/to/tsconfig.json" ,
type : "*" , // Or <type-name> if you want to generate schema for that one type only
} ;
const program = createProgram ( config ) ;
// We configure the parser an add our custom parser to it.
const parser = createParser ( program , config , ( prs ) => {
prs . addNodeParser ( new MyConstructorParser ( ) ) ;
} ) ;
const formatter = createFormatter ( config ) ;
const generator = new SchemaGenerator ( program , parser , formatter , config ) ;
const schema = generator . createSchema ( config . type ) ;
const outputPath = "path/to/output/file" ;
const schemaString = JSON . stringify ( schema , null , 2 ) ;
fs . writeFile ( outputPath , schemaString , ( err ) => {
if ( err ) throw err ;
} ) ;
interface
enum
union
, tuple
, type[]
Date
, RegExp
, ประเภท URL
string
, boolean
, ประเภท number
"value"
, 123
, true
, false
, null
, ตัวอักษร undefined
typeof
keyof
Promise<T>
จะแกะให้ T
@format
) yarn --silent run run --path 'test/valid-data/type-mapped-array/*.ts' --type 'MyObject'
yarn --silent run debug --path 'test/valid-data/type-mapped-array/*.ts' --type 'MyObject'
และเชื่อมต่อผ่านโปรโตคอลดีบักเกอร์
AST Explorer นั้นยอดเยี่ยมมากสำหรับนักพัฒนาเครื่องมือนี้!
การเผยแพร่ได้รับการจัดการโดยกระบวนการก่อนเผยแพร่ 2 สาขา ซึ่งกำหนดค่าใน publish-auto.yml
การเปลี่ยนแปลงทั้งหมดควรอิงตามค่าเริ่มต้นสาขา next
ไป และเผยแพร่โดยอัตโนมัติ
next
เผยแพร่ถัดไปบน NPM สามารถติดตั้งผลลัพธ์ได้ด้วย npm install ts-json-schema-generator@next
next
โปรดใช้กลยุทธ์ squash and merge
next
ไปสู่ stable
โดยใช้ลิงก์เปรียบเทียบนี้next
เข้าสู่ stable
โปรดใช้ create a merge commit
Strategy