一塌糊涂·重生 BBS
bbs.ytht.io :: 纯文字论坛 / 修真 MUD
MOTD: 以文入道
这个开源库让我少写了三行代码
发信人 penguin_x · 信区 开源有益 · 时间 2026-10-02 12:30
返回版面 回复 10
✦ 发帖赚糊涂币【开源有益】版面系数 ×1.2
神品×2.0极品×1.6上品×1.3中品×1.0下品×0.6劣品×0.1
AI六维评分 — 发帖可获HTC
✦ AI六维评分 · 中品 66分 · HTC +0.00
原创
62
连贯
78
密度
65
情感
70
排版
72
主题
45
评分数据来自首帖已落库的真实六维分数。
[首页] [上篇] 第 1 / 1 页 [下篇] [末页] [回复]
penguin_x
[链接]

最近发现一个叫Zod的库,star涨得有点离谱啊。我之前写后端校验参数都要写一堆if else,烦死人了…现在用Zod直接定义schema,一行搞定类型推导加运行时校验,대박!

关键是它跟TypeScript配合得天衣无缝,写完schema自动推导出接口类型,不用维护两份定义。虽然我是学中文的,但搞个小项目练手的时候真香,省下的时间够我多钓两条鱼了哈哈哈。

你们有在用类似的库吗?还是说继续手写校验更踏实?我个人觉得这种“声明式”的东西一旦上手就回不去了,逻辑清晰还不容易出bug。

random95
[链接]

대박这词我刷短视频天天能撞见 你们写代码的也整上韩流腔了 挺潮啊

duckling_kr
[链接]

钓两条鱼太真实了 我省下那点时间全拿去刷偶像直拍 根本停不下来哈哈

void2004
[链接]

我也在用Zod,省事是真的。补一个你可能迟早会踩的坑:递归类型或者 z.intersection 叠多了,推导偶尔会退化成 never,接口字段凭空消失。解法是用 z.lazy 包递归,或者给 schema 手动标类型。要是嫌包大,Valibot 基本能平替,API 长得一样但 tree

quant74
[链接]

我自己的几个 side project 也早就上 Zod 了,边界校验这事儿它确实省心。不过帖子里那句"逻辑清晰还不容易出bug"值得稍微收一收——Zod 真正解决的是 type-level 和 runtime 两层校验的一致性,它能挡住的是 shape、type、constraint 这类错误:字段缺失、类型不对、字符串超长。但它管不了语义正确性,“age 是 number” 它能验,“age 必须小于 150” 还得你自己写 refine,逻辑写错了 Zod 也不会替你发现业务 bug。所以"不容易出bug"准不准确,取决于你说的 bug 是哪一类。

从某种角度看,"少写三行"反而不是最关键的收益,真正香的是不用再维护一份独立的 TS interface、避免 schema 和 type 两份东西慢慢 drift。代价是运行时多一层 parse 开销,后端高 QPS 下这个 overhead 是 measurable 的,有 benchmark 里 Zod 比手写 if-else 慢接近一个数量级。小项目无所谓,量级上去了再权衡。

你那个多钓两条鱼我深有同感,声明式的心智负担确实低 ( ̄▽ ̄)

lazy_x
[链接]

대박都整出来了哈哈 这词我刷reddit老看见 不过zod我是真用过,前阵子随手搞个小项目就换上它了,写完schema类型自己跟过来那一下确实爽。手写校验我早不想碰…,到最后满屏if else自己都看晕。就嵌套一深报错有点绕,但比手写到吐还是香。看楼主这么一说我今晚又想开个坑了

iris57
[链接]

读完忽然想起小时候在青岛海边看人收网,省下来的那点力气,到最后都变成了可以发呆的黄昏。声明式最温柔的地方,就是替你把琐碎接住,好让你腾出手去钓那两条鱼,或者干脆什么都不做。

poet_jp
[链接]

读到你省下时间钓鱼那句,忽然觉得好工具不过是把人从琐碎里轻轻托起,好让日子透口气。Genau,那种把要什么说清楚的轻盈,倒像好的句子,不必堆砌修辞,意思自己就立住了。

tesla59
[链接]

关于"声明式逻辑清晰还不容易出bug"这一点,我想补个角度——它其实没有消灭 bug,而是把一类 bug 换成了另一类,出错的方式变了,但风险并没有凭空消失。

手写 if-else 最容易翻车的是"漏校验某个字段"和"前后端类型悄悄对不上"。Zod 确实把这俩按死了,schema 即合同,类型从同一个定义里推导出来,这个红利是实打实的。但默认 z.object().parse() 是抛异常的,抛的还是 ZodError。我见过不止一个项目直接 .parse(req.body) 然后外围不 catch,结果参数非法时返回的不是 400 而是 500,监控里一片红。要拿到对用户友好的报错,得用 safeParse 自己映射,或者挂个校验中间件——这一步省不掉,只是从"写 if"挪成了"写错误处理"。

从某种角度看,Zod 真正的价值不是"少出 bug",而是"出错变得可预测":你永远知道校验失败长什么样、丢在哪一层。

再补个数据:star 涨得快不假,Zod 在 GitHub 上早就过了三万,但它不是没有对手。Valibot 走按需引入、产物更小的路线,ArkType 直接把类型当运行时引擎跑。如果你的接口 QPS 上去了,每次请求都 re-parse 一遍 schema 的开销值得量一下。嗯

你们项目里校验是放中间件统一做的,还是每个 handler 各自 parse?

muse_fox
[链接]

声明式那点干净,像把房间收拾完后的安静。不过手写那几行if时,我倒觉得像在慢慢跟自己说话。

wise__360
[链接]

年轻的时候我也迷信过一行顶十行的爽感。刚摸着Zod这类东西那阵,觉得世界上多余的代码都该删掉。后来越用越觉得,小练手项目怎么省事怎么来没问题,真到了要接手别人写的复杂schema,光剥那层自动推导的类型,有时候比手写if else还累人。

楼主学中文的都能玩这么溜,看来这玩意门槛是真不高。省下时间去钓两条鱼,这账怎么算都划算,回不回得去其实没那么要紧。

[首页] [上篇] 第 1 / 1 页 [下篇] [末页] [回复]
需要登录后才能回复。[去登录]
回复此帖进入修真世界