给你推荐一款快速通过 typescript 生成 jsonschema 的包处理器

zaneblog / 2023-07-31 / 原文

theme: github

fast-typescript-to-jsonschema

npm version
Test
codecov

Typescript 生成 jsonschema 数据插件

性能

案例

interface AAA {
    a: number;
    b: string;
    c: boolean;
}
解析器 解析耗时
fast-typescript-to-jsonschema 15ms
typescript-json-schema 5430ms

特性

  • 编译Typescript文件以获取完整的类型信息
  • 将所需的属性、继承、注释、属性初始值转换为jsonschema

使用

1.安装依赖

yarn add fast-typescript-to-jsonschema -D

2.创建type.ts文件,内容如下:

interface ITest {
  attr1: string;
  attr2: number;
  attr3?: boolean;
}
  1. 创建test.js文件,内容如下:

3.1 通过文件生成 jsonschema

const { default: genTypeSchema } = require('fast-typescript-to-jsonschema');
const path = require('path');

// 目标文件
const file = path.resolve(__dirname, './type.ts');

// 生成数据
genTypeSchema.genJsonDataFormFile(file);

// 获得当前文件对应的所有jsonschema数据
const json = genTypeSchema.genJsonData();

// 获得具体的某个type的jsonschema数据
const jsonSchema = genTypeSchema.getJsonSchema(file, 'ITest');

// 返回结果
console.log(jsonSchema); 

3.2 通过 code 生成 jsonschema

const { default: genTypeSchema } = require('fast-typescript-to-jsonschema');

const code = `
interface ITest {
  attr1: string;
  attr2: number;
  attr3?: boolean;
}
`
// generate data
genTypeSchema.genJsonDataFromCode(code);

// get all jsonschema data of current file
const json = genTypeSchema.genJsonData();

// get jsonschema of specific type
const jsonSchema = genTypeSchema.getJsonSchema('ITest');

// result
console.log(jsonSchema); 

4.执行脚本

node ./test.js

jsonSchema返回结果如下:

{
  "additionalProperties": false,
  "properties": {
    "attr1": {
      "type": "string",
    },
    "attr2": {
      "type": "number",
    },
    "attr3": {
      "type": "boolean",
    },
  },
  "required": [
    "attr1",
    "attr2",
  ],
  "type": "object",
}
  • example 案例地址:
    https://github.com/yunke-yunfly/fast-typescript-to-jsonschema/tree/master/example

注释

示例1

interface Interface_1 {
  attr: string;
}

结果:

{
  "additionalProperties": false,
  "properties": {
    "attr": {
      "type": "string",
    },
  },
  "required": [
    "attr",
  ],
  "type": "object",
}

示例2

interface Interface_4 {
  attr: string[];
}

结果:

{
  "additionalProperties": false,
  "properties": {
    "attr": {
      "items": {
        "type": "string",
      },
      "type": "array",
    },
  },
  "required": [
    "attr",
  ],
  "type": "object",
}

更多支持的类型解析请看,目录如下:

  • 接口
    • 1.1简单类型
    • 1.2联合类型
    • 1.3交叉类型
    • 1.4数组类型
      • 1.4.1简单数组类型
      • 1.4.2复杂数组类型
    • 1.5嵌套
      • 1.5.1简单嵌套
      • 1.5.2联合嵌套
      • 1.5.3交叉嵌套
      • 1.5.4数组交叉
      • 1.5.5循环嵌套
    • 1.6索引类型
  • 模块
    • 1.1简单导出
    • 1.2导出重命名
  • 继承
    • 1.1简单继承
    • 1.2多继承
  • 枚举
    • 1.1数字枚举
    • 1.2字符串枚举
    • 1.3计算枚举
    • 1.4复杂枚举
      • 1.4.1简单接口转枚举
      • 1.4.2复杂接口转枚举
  • 泛型
    • 1.1简单
    • 1.2复杂泛型
  • 命名空间
    • 1.1简单
    • 1.2复杂
  • type类型
    • 1.1基本类型
    • 1.2复杂
      • 1.2.1联合类型
      • 1.2.2联合数组
      • 1.2.2引用枚举
  • 工具函数
    • 1.1对象工具
      • 1.1.1Omit
        • 1.1.1.1简单
        • 1.1.1.2联合
        • 1.1.1.3引入
      • 1.1.2Pick
        • 1.1.2.1简单
        • 1.1.2.2引入
  • 注释
    • 1.1单行注释
    • 1.2单行注释默认值
    • 1.3多行注释
    • 1.4多行注释默认值
    • 1.5单行多行注释默认值

贡献

我们非常欢迎您的贡献,您可以通过以下方式与我们共建。

  • 提交GitHub 问题以报告错误或提出问题。
  • 提出拉取请求以改进我们的代码。
  • 贡献指南。