基于编译期转换的 TypeScript 库,把纯类型定义编译为运行时校验、JSON 序列化等函数。
DZakh/sury
TypeScript 与 ReScript 通用 Schema 库,一次声明即可完成数据校验、解析与编码,支持 JSON、表单和 Protobuf。
- Star
- 494
- Fork
- 15
- 未关闭 Issue
- 18
- 最近提交
- 前天
这是什么?
Sury 是一个面向 TypeScript 和 ReScript 的 Schema 库。开发者只需声明一次数据模型,同一份 Schema 即可把不可信输入解析为带类型的值,也能把类型化的数据编码回传输格式,并从声明中推导 TypeScript 类型。Schema 还可以串联,例如把 base64url 字符串或 JSON 文本作为原始输入与数据模型之间的一个处理阶段。
库内置了 JSON、JSON 字符串、表单数据、环境变量、URL 查询参数、base64、Uint8Array、Protobuf、File 和 Blob 等格式的编解码。Protobuf 无需 .proto 文件或代码生成步骤,也可以导出 .proto 供其他方使用。Schema 同时实现了 Standard Schema 与 Standard JSON Schema,并支持 JSON Schema 双向转换。
项目会在运行时为每个 Schema 生成专用的 JavaScript 函数以提升性能。针对 Schema 的操作包括解析、编码、构造校验、相等与比较,每种都提供同步、Promise 和 Result 返回等变体。
核心功能
- 01基于一次 Schema 声明完成解析与编码,并推导出 TypeScript 类型。
- 02内置 JSON 字符串、表单数据、环境变量、Protobuf、base64 和 File/Blob 等格式。
- 03兼容 Standard Schema,可接入 tRPC、Hono 等支持该规范的库。
- 04支持与 JSON Schema 双向转换,并可从 Protobuf Schema 生成 .proto 定义。
- 05校验失败时报告每个问题及其路径,遇到 JSON.stringify 会静默破坏的值时直接抛错。
适用场景
- 在 TypeScript 后端或客户端中校验 API 请求与响应数据。
- 以带类型的字段和文件解析与构造 multipart 表单提交。
- 把环境变量读取为带默认值和校验的类型化配置。
- 在不维护生成代码的情况下编解码 Protobuf 消息。
快速上手
- 1
从 npm 安装 sury 包
npm install sury - 2
在 TypeScript 代码中导入库并声明一个 schema
使用前须知
- 文档中列出的 S.request、S.response、S.capnp、S.rkyv 和 S.toon 等数据格式尚未提供,属于后续计划。
- JSON Schema 导入仅通过官方 draft-07 测试套件的约 93%,部分 schema 可能无法完整转换。
标签
常见问题
- sury 是什么?
- TypeScript 与 ReScript 通用 Schema 库,一次声明即可完成数据校验、解析与编码,支持 JSON、表单和 Protobuf。 Sury 是一个面向 TypeScript 和 ReScript 的 Schema 库。开发者只需声明一次数据模型,同一份 Schema 即可把不可信输入解析为带类型的值,也能把类型化的数据编码回传输格式,并从声明中推导 TypeScript 类型。Schema 还可以串联,例如把 base64url 字符串或 JSON 文本作为原始输入与数据模型之间的一个处理阶段。
- sury 可以免费使用吗?用的什么许可证?
- sury 以 MIT 许可证开源。用于商业产品前,请先确认许可证条款。
- sury 还在维护吗?
- 活跃维护中。sury 最近一次提交是在 2026年11月5日。
- sury 适合用来做什么?
- 在 TypeScript 后端或客户端中校验 API 请求与响应数据。 以带类型的字段和文件解析与构造 multipart 表单提交。 把环境变量读取为带默认值和校验的类型化配置。 在不维护生成代码的情况下编解码 Protobuf 消息。
- sury 怎么安装和运行?
- 从 npm 安装 sury 包: npm install sury 在 TypeScript 代码中导入库并声明一个 schema
- 在哪里获取 sury?
- 源代码和安装说明在 GitHub 上:https://github.com/DZakh/sury
概要由 AI 根据项目 README 生成;GitHub 数据每日更新。
相关项目
基于 Python 类型提示的数据校验库,可解析并校验外部数据,核心由 Rust 实现。
一套用于描述 AI 智能体能力、技能、领域与元数据的标准化 schema 框架及服务器,便于校验与发现。
一个快速的 Python 序列化与校验库,基于类型注解编解码 JSON、MessagePack、YAML 和 TOML。
一个基于网页的 JSON 查看与编辑组件,提供树形、代码、文本和预览四种模式。
从 JSON、JSON Schema、TypeScript 和 GraphQL 查询生成多种语言的强类型模型与序列化代码。