tschema
一个用于构建JSON schema类型的微小(490字节)工具。
安装
该软件包与所有JavaScript运行时兼容,并可在多个注册表上获得:
- npm — 可用作
tschema
- JSR — 可用作
@lukeed/tschema
使用方法
import * as t from 'tschema';
// 定义JSON对象模式
let User = t.object({
uid: t.integer(),
name: t.string({
description: '全名',
examples: ['Alex Johnson'],
}),
isActive: t.boolean(),
avatar: t.optional(
t.string({ format: 'uri' }),
),
achievements: t.tuple([
t.number({ minimum: 0 }), // 分数
t.enum(['novice', 'pro', 'expert', 'master']),
]),
interests: t.array(
t.string({
minLength: 4,
maxLength: 36,
}),
),
last_updated: t.integer({
minimum: 0,
examples: [1722642982],
description: 'unix秒数',
}),
}, {
description: '用户记录',
});
// 推断其TypeScript定义:
// 注意:名称不必匹配~!
type User = t.Infer<typeof User>;
//-> {
//-> uid: number;
//-> name: string;
//-> isActive: boolean;
//-> avatar?: string | undefined;
//-> achievements: [number, "novice" | "pro" | "expert" | "master"];
//-> interests: string[];
//-> last_updated: number;
//-> }
console.log(User);
//-> {
//-> type: "object",
//-> description: "用户记录",
//-> additionalProperties: false,
//-> properties: {
//-> uid: {
//-> type: "integer"
//-> },
//-> name: {
//-> type: "string",
//-> description: "全名",
//-> examples: ["Alex Johnson"]
//-> },
//-> isActive: {
//-> type: "boolean"
//-> },
//-> avatar: {
//-> type: "string",
//-> format: "uri"
//-> },
//-> achievements: {
//-> type: "array",
//-> prefixItems: [{
//-> type: "number",
//-> minimum: 0
//-> }, {
//-> enum: ["novice", "pro", "expert", "master"]
//-> }],
//-> minItems: 2,
//-> maxItems: 2
//-> },
//-> interests: {
//-> type: "array",
//-> items: {
//-> type: "string",
//-> minLength: 4,
//-> maxLength: 36
//-> }
//-> },
//-> last_updated: {
//-> type: "integer",
//-> minimum: 0,
//-> examples: [1722642982],
//-> description: "unix秒数"
//-> }
//-> },
//-> required: [
//-> "uid",
//-> "name",
//-> "isActive",
//-> "achievements",
//-> "interests",
//-> "last_updated"
//-> ]
//-> }
API
请参阅生成的API文档,因为它始终保持最新。
注意: 无论安装来源如何,API在所有JavaScript运行时中都是相同的。只有包的名称会发生变化。
基准测试
在Deno 1.45.5
(release, aarch64-apple-darwin)
上运行,使用v812.7.224.13
文件:tschema/scripts/bench.ts
运行时:deno 1.45.5 (aarch64-apple-darwin)
# 构建器
tschema 5,328,603.3 次/秒 187.67 纳秒/次
sinclair/typebox 130,480.2 次/秒 7.66 微秒/次
zod-to-json-schema 46,928.5 次/秒 21.31 微秒/次
# 总结
tschema
比sinclair/typebox快40.84倍
比zod-to-json-schema快113.55倍
许可证
MIT © Luke Edwards