新闻详情

新闻详情

首页 / 资讯中心 / 详情

Zod:支持 TypeScript 的验证库,具备静态类型推断,验证速度最高可提升 9 倍!

发布时间:2026/8/31 15:45:14来源:尧图网络
Zod:支持 TypeScript 的验证库,具备静态类型推断,验证速度最高可提升 9 倍!
什么是 ZodZod 是一个优先支持 TypeScript 的验证库。能定义一个模式用它来解析数据最终得到经过强类型验证的结果。import * as z from zod; const User z.object({ name: z.string(), }); // 一些不可信的数据 const input { /* 数据内容 */ }; // 解析结果经过验证且类型安全 const data User.parse(input); // 可以放心使用它 :) console.log(data.name);特性零外部依赖不依赖其他外部库减少项目的复杂度和潜在风险。跨环境兼容可在 Node.js 和所有现代浏览器中使用具有广泛的适用性。轻量级核心包仅 2kbgzipped对项目体积影响极小。不可变 API方法返回新实例避免副作用保证数据的安全性和可维护性。简洁接口提供简洁易用的 API降低开发难度。多语言支持可与 TypeScript 和纯 JavaScript 配合使用满足不同开发需求。内置 JSON Schema 转换方便与其他系统进行交互和数据验证。丰富的生态系统有众多插件和工具可供使用扩展功能强大。安装npm install zod基本用法使用之前需要先定义一个模式。在本指南中使用一个简单的对象模式。import * as z from zod; const Player z.object({ username: z.string(), xp: z.number(), });解析数据对于任何 Zod 模式可使用 .parse 方法来验证输入。若输入有效Zod 将返回一个经过强类型处理的输入数据的深拷贝。Player.parse({ username: billie, xp: 100 }); // 返回 { username: billie, xp: 100 }注意若模式使用了某些异步 API如异步细化async refinements或转换transforms则需使用 .parseAsync() 方法。const schema z.string().refine(async (val) val.length 8); await schema.parseAsync(hello); // helloAOT 编译对于频繁进行验证的场景z.compile(schema) 会返回一个经过提前编译的模式克隆以加快验证速度。有效输入将使用编译后的路径无效输入则回退到常规解析器确保错误报告保持一致。在 55 个模式的基准测试中平均提速 2.4 倍并且提速效果会随着模式每次解析的工作量增加而提升大型对象数组约 9 倍20 个键的对象约 9 倍嵌套对象约 4.5 倍而单纯的 z.string() 则没有提速效果因为编译主要是消除了每个节点的调度和分配而单个 typeof 操作本身就不存在这些开销。const CompiledPlayer z.compile(Player); CompiledPlayer.parse({ username: billie, xp: 100 });若要在导入后全局启用模式编译可添加以下代码import zod/compile; // 需在定义模式的模块之前导入注意事项编译使用了 new Function。当设置 z.config({ jitless: true }) 时如在 CSP 环境中全局模式将自动禁用直接调用 z.compile() 则是显式启用。带有异步细化或转换的模式无法编译还有一些其他构造也不支持。这不是错误z.compile() 会原样返回模式并继续使用常规解析器就像全局模式未启用一样。若要抛出错误提示可传递 { strict: true }此时会抛出 ZodCompileAsyncError 或 ZodCompileUnsupportedError。对于无效输入细化和转换操作可能会运行两次先快速路径再回退。从编译后的模式派生新的模式如 .refine()、.extend() 等会返回未编译的模式需要对最终模式进行编译。详细信息可查看编译文档。错误处理当验证失败时.parse() 方法会抛出一个 ZodError 实例其中包含详细的验证问题信息。try { Player.parse({ username: 42, xp: 100 }); } catch (err) { if (err instanceof z.ZodError) { err.issues; /* [ { expected: string, code: invalid_type, path: [ username ], message: Invalid input: expected string }, { expected: number, code: invalid_type, path: [ xp ], message: Invalid input: expected number } ] */ } }为避免使用 try/catch 块可使用 .safeParse() 方法它会返回一个普通的结果对象其中包含成功解析的数据或 ZodError。结果类型是一个可区分的联合类型方便处理两种情况。const result Player.safeParse({ username: 42, xp: 100 }); if (!result.success) { result.error; // ZodError 实例 } else { result.data; // { username: string; xp: number } }注意若模式使用了某些异步 API如异步细化或转换则需使用 .safeParseAsync() 方法。const schema z.string().refine(async (val) val.length 8); await schema.safeParseAsync(hello); // { success: true; data: hello }类型推断Zod 可以从模式定义中推断出静态类型。可使用 z.infer 工具提取该类型并在代码中随意使用。const Player z.object({ username: z.string(), xp: z.number(), }); // 提取推断出的类型 type Player z.infer; // 在代码中使用 const player: Player { username: billie, xp: 100 };在某些情况下模式的输入和输出类型可能会不同。例如.transform() API 可以将输入从一种类型转换为另一种类型。在这种情况下可以分别提取输入和输出类型const mySchema z.string().transform((val) val.length); type MySchemaIn z.input; // string type MySchemaOut z.output; // 等同于 z.infer // number
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

STM32与OpenMV六轴机械臂视觉抓取:从硬件选型到逆运动学实践 2026/8/31 18:16:11

STM32与OpenMV六轴机械臂视觉抓取:从硬件选型到逆运动学实践

简介:本资源是一套完整的基于STM32的六轴机械臂视觉控制系统,面向计算机、自动化、机器人等专业的本科生毕业设计与课程实践需求,解决机械臂自主识别—定位—抓取彩色目标物的核心问题。项目融合嵌入式开发(STM32 HAL库&#xff0…

阅读更多 →
FPGA驱动OV5640摄像头实时显示:从I2C配置到VGA/LCD驱动的全流程解析 2026/8/31 18:16:11

FPGA驱动OV5640摄像头实时显示:从I2C配置到VGA/LCD驱动的全流程解析

简介:本资源是一套完整的FPGA图像采集与显示系统工程,面向数字电路与嵌入式视觉方向的学习者与开发者,解决OV5640摄像头数据实时采集、缓存与VGA/LCD双路显示的核心问题。工程基于Cyclone IV E系列EP4CE6F17C8芯片,使用Quartus 17…

阅读更多 →
LSM6DSOW六轴传感器调试:匿名上位机波形与3D姿态可视化 2026/8/31 18:16:11

LSM6DSOW六轴传感器调试:匿名上位机波形与3D姿态可视化

简介:本资源是一套面向嵌入式开发者与STM32进阶学习者的MEMS传感器实战开发资料,聚焦LSM6DSOW六轴陀螺仪/加速度计在STM32H503平台上的数据采集与可视化落地。解决的核心问题是:如何通过标准串口协议将原始IMU数据可靠上传至匿名四轴上位机&a…

阅读更多 →
海湾消防主机编程软件4.0实战:从串口通讯到联动调试全流程 2026/8/31 18:16:11

海湾消防主机编程软件4.0实战:从串口通讯到联动调试全流程

简介:海湾消防主机编程软件4.0是面向消防系统集成工程师、维保技术人员及项目调试人员的专业配置工具,专用于海湾品牌火灾报警控制器的参数设置、设备管理与联动逻辑编程,解决现场主机部署中系统配置复杂、联动调试困难、故障响应验证低效等核…

阅读更多 →
ATOM-IMU V53实战解析:多接口姿态解算模块的工程应用与调试技巧 2026/8/31 18:16:11

ATOM-IMU V53实战解析:多接口姿态解算模块的工程应用与调试技巧

简介:ATOM-IMU模块V53是一款面向嵌入式开发者、机器人与无人机工程师的高性能惯性测量单元硬件项目,解决高精度实时姿态解算与多协议数据回传难题,适用于飞行控制、移动机器人导航、车辆动态监测等对低延迟和接口灵活性要求严苛的场景。资源包…

阅读更多 →
用Matlab绘制电机效率MAP图:从散点到完美云图的通用方法 2026/8/31 18:11:09

用Matlab绘制电机效率MAP图:从散点到完美云图的通用方法

简介:本资源是一套面向电机控制工程师与高校科研人员的MATLAB专用MAP图绘制工具包,解决电机效率、转矩、电流等多维性能数据可视化难题,适用于电驱动系统设计、控制器标定及教学演示等实际场景。压缩包共3个文件(116KB&#xff09…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞