前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >模式声明和验证库 Zod 介绍

模式声明和验证库 Zod 介绍

原创
作者头像
一介程序员
修改2022-04-26 22:28:29
1.9K0
修改2022-04-26 22:28:29
举报
文章被收录于专栏:写两行代码放松下

Zod 是一个以 TypeScript 为首的模式声明和验证库

最近的项目中,涉及到大量的接口调用,前端代码默认接口返回的数据是满足类型声明的,并没有进行校验。昨天在网上发现一个名为Zod的库,感觉还挺不错的。

假设项目中有这么一段代码

代码语言:typescript
复制
type User = {
  name: string;
  age: number;
};

//假设从接口获取到数据
const src_json_str = '{"name":"hello" , "age":28}'

//这里没有验证数据是否满足要求
const data_json = JSON.parse(src_json_str) as User

console.log(data_json);

这段代码有个问题,如果接口返回的"age"不是数字,而是字符串,那么就可能会产生一个隐藏的bug,这个时候,Zod库就能帮我们找出这个潜在的问题。

代码语言:typescript
复制
import { z } from "zod";

const User = z.object({
  name: z.string(),
  age: z.number(),
});

// 假设这里 age 的数据类型为 string,不是 number
const src_json_str = '{"name":"hello" , "age":"28"}';

//这里没有验证数据是否满足要求
const data_json = User.parse(JSON.parse(src_json_str));

console.log(data_json);

运行上面的代码,程序会直接报异常(下图),将错误在开发阶段就暴露出来。

image-20220426215733791.png
image-20220426215733791.png

当然除了数据类型的判断,Zod库还能做一些简单的逻辑判断:

代码语言:typescript
复制
const User = z.object({
  name: z.string().min(2).max(10).optional(),// name 字符串长度在2~10之间,且为可选字段
  age: z.number().gt(0),//age 大于 0
});

这个库使用比较简单,细节可以参考官网

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档