如何从TypeScript interface生成MongoDB JSON Schema?
解决方案
你可以通过以下两种方案完成批量转换,按需选择即可:
方案1:使用成熟工具(推荐,适合中大型项目)
使用ts-json-schema-generator工具,搭配自定义类型映射规则,开箱即可生成符合要求的MongoDB JSON Schema:
- 安装依赖
npm i ts-json-schema-generator -D
- 新建转换脚本,示例如下:
// generate-mongo-schema.js const tsj = require('ts-json-schema-generator'); const fs = require('fs'); const config = { path: './src/collections/*.ts', // 替换为你存放interface的文件路径 tsconfig: './tsconfig.json', type: 'Category', // 要转换的interface名,传*则批量转换所有interface additionalProperties: false, // 自动生成禁止额外字段的规则 required: true, // 自动将所有interface字段加入必填列表 }; // 生成基础JSON Schema let schema = tsj.createGenerator(config).createSchema(config.type); // 替换为MongoDB专属的bsonType规则 let schemaStr = JSON.stringify(schema, null, 2) .replace(/"type": "ObjectId"/g, '"bsonType": "objectId"') .replace(/"type": "Date"/g, '"bsonType": "date"') .replace(/"type": "null"/g, '"bsonType": "null"') .replace(/"type": "string"/g, '"bsonType": "string"'); // 导出为ts文件可用的常量格式 const output = `export const CategoryJSONSchema = ${schemaStr}`; fs.writeFileSync('./src/schemas/category.schema.ts', output);
- 运行脚本即可得到符合要求的schema文件,批量转换时只需遍历所有interface名生成对应文件即可。
方案2:手写轻量脚本(适合简单场景)
如果你的项目interface规则比较固定,也可以基于TypeScript Compiler API自己写解析逻辑,几十行代码就能完成转换,不需要引入额外依赖,适合自定义需求高的场景。
内容的提问来源于stack exchange,提问作者DauleDK
相关产品推荐
相关产品推荐

