将 Typescript Class DTO 转换为 Fastify Swagger 的 JSON Schema
Convert Typescript Class DTO into JSON Schema for Fastify Swagger
我正在尝试将我的 DTO class (Typescript) 转换为 JSON 模式:
import { IsNumber, IsString } from 'class-validator';
import { classToPlain } from 'class-transformer';
export class TodoDTO {
@IsNumber()
id?: number;
@IsString()
name?: string;
@IsString()
description?: string;
}
let todo = classToPlain(TodoDTO);
console.log('todo=>', todo);
我尝试使用两个包 class-transformer 和 class-validator 来转换和验证 TodoDTO class.
在控制台中,输出为 todo=> [Function: TodoDTO]
预期输出:
"TodoDTO": {
"type": "object",
"properties": {
"id": { "type": "number" },
"name": { "type": "string" },
"description": { "type": "string" }
},
"required": [ "id", "name", "description" ]
}
我正在尝试使用 TodoDTO class 作为 fastify-typescript 中的 json-schema。
欢迎提出任何建议。
我从来没有这样做过,但你可以用其他方式来执行。
使用 typed-ajv 您可以将类似 ajv 的 dsl 转换为 ts 类 和 json 架构。
例子
import { CS } from '@keplr/typed-ajv';
const TodoDTOCS = CS.Object({
id: CS.Number(true),
name: CS.String(false),
description: CS.String(false),
});
type TodoDTO = typeof TodoDTOCS.type;
// TodoDTO is the correct ts type
const todo: TodoDTO = {
//
}
// jsonSchema will be the expected json-schema format
const jsonSchema = TodoDTOCS.getJsonSchema();
免责声明:我是 typed-ajv
的维护者之一
我使用了一个名为 class-validator-jsonschema 的库,它帮助我根据需要将 class 转换为 json-schema。
代码如下:
import { IsNumber, IsString } from 'class-validator';
export class TodoDTO {
@IsNumber()
id?: number;
@IsString()
name?: string;
@IsString()
description?: string;
}
import { validationMetadatasToSchemas } from 'class-validator-jsonschema';
import * as todoDtos from './todo.dto';
export { todoDtos };
export const schemas = validationMetadatasToSchemas();
console.log('schemas=>', schemas);
我正在尝试将我的 DTO class (Typescript) 转换为 JSON 模式:
import { IsNumber, IsString } from 'class-validator';
import { classToPlain } from 'class-transformer';
export class TodoDTO {
@IsNumber()
id?: number;
@IsString()
name?: string;
@IsString()
description?: string;
}
let todo = classToPlain(TodoDTO);
console.log('todo=>', todo);
我尝试使用两个包 class-transformer 和 class-validator 来转换和验证 TodoDTO class.
在控制台中,输出为 todo=> [Function: TodoDTO]
预期输出:
"TodoDTO": {
"type": "object",
"properties": {
"id": { "type": "number" },
"name": { "type": "string" },
"description": { "type": "string" }
},
"required": [ "id", "name", "description" ]
}
我正在尝试使用 TodoDTO class 作为 fastify-typescript 中的 json-schema。
欢迎提出任何建议。
我从来没有这样做过,但你可以用其他方式来执行。
使用 typed-ajv 您可以将类似 ajv 的 dsl 转换为 ts 类 和 json 架构。
例子
import { CS } from '@keplr/typed-ajv';
const TodoDTOCS = CS.Object({
id: CS.Number(true),
name: CS.String(false),
description: CS.String(false),
});
type TodoDTO = typeof TodoDTOCS.type;
// TodoDTO is the correct ts type
const todo: TodoDTO = {
//
}
// jsonSchema will be the expected json-schema format
const jsonSchema = TodoDTOCS.getJsonSchema();
免责声明:我是 typed-ajv
的维护者之一我使用了一个名为 class-validator-jsonschema 的库,它帮助我根据需要将 class 转换为 json-schema。
代码如下:
import { IsNumber, IsString } from 'class-validator';
export class TodoDTO {
@IsNumber()
id?: number;
@IsString()
name?: string;
@IsString()
description?: string;
}
import { validationMetadatasToSchemas } from 'class-validator-jsonschema';
import * as todoDtos from './todo.dto';
export { todoDtos };
export const schemas = validationMetadatasToSchemas();
console.log('schemas=>', schemas);