-
Notifications
You must be signed in to change notification settings - Fork 55
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
【第七十二期】2023-02-27 #76
Comments
在调研Zod时,发现存在一个困难点是, 我要使用zod的语法, 努力重写一遍我在service中已经实现过的ts类型声明; 试图google过 直接从ts type生成zod定义的工具, 也许可以解决第一个问题, 但是第二个问题还是无法解决 |
个人认为,zod 最主要还是在与 json 衔接的地方(通常是后端与前端的交界处,用户输入到前端接口的交界处)提供运行时的类型检查,其目标要比 TS 的类型简单一些。所以并不见得要灵活成 TS 那样。其关注点就是当前的 json 的形状,外加一些业务规则限制。 |
同意, 我也认同, zod 对api 的校验应该朴素一些. 最终我们选择了模仿trpc, 干脆自己diy一个proxy实现, 但是也可能是我没有找到在trpc里手动声明input参数类型的地方, 如果有朋友知道的话也可以教教我 |
我用的 fastify,不了解 trpc。在 fastify 中如果要用 zod,需要用类似 https://github.com/elierotenberg/fastify-zod 这样的插件,单独声明出口 API 的声明和类型。出口 API 主要衔接 controller 和 service 层下的交界,再往下的类型主要依赖 prisma 生成的了。 而且我目前前端因为目前用的 veevalid,还需要用 yup 再声明一遍。zod 生成的类型只是用于前台 fetch 到的数据的形状了。一直想把这一块统一为 zod,但是一直没搞。 感觉理想状态下,zod 定义一遍能把前台用户输入的形状限制住,同时限制后台的输入的形状。同一份代码前后端的校验都用了。 |
同意, 我觉得理想状态还可以进一步: 如果是纯全栈场景(即Node HTTP Rest API 接口仅由同一个工程内的前端调用), 那么如zod这种库的运行时校验和数据parse的意义不大, 因为 JSON 本身就是自解释的, 很多时候只需要ts的静态校验就足够满足类型安全和开发者体验. |
zod 除了提供 “正确”,还能提供一些其他价值,比如有一定防攻击的能力,因为前台代码虽然是你写的,但是别人也可以来探测你的接口。zod 可以把输入在运行时限制一道。应该还能找到其他场景,zod 还是有很大价值的。限制运行时输入,测试也简单了。TypeScript 相当于实现了部分编译态测试。另外 zod 相当于让 TypeScript 获得了 sound 的能力(在某一部分)。 zod 让 TS 的这些框架获得了其他比如 c#、java、rust 后端框架现在也在提供的流行的能力。价值还是比较高的。 |
美味值:🌟🌟🌟🌟🌟
口味:草莓番茄
本期摘要
大家好,我是童欧巴。欢迎来到前端食堂技术周刊,我们先来看下上周的技术资讯。
技术资讯
1. Signals 是前端框架的未来
Builder.io 的 CTO、Angular、Qwik 的作者 Miško Hevery 近日发文表示 Signals 是前端框架的未来。
尤大也在 Vue 官网上添加了 Connection to Signals 部分。将目前实现 Signals 的框架:Solid、Angular、Preact、Qwik 与 Vue 进行了一波对比。
其中 Preact 和 Qwik 的 API 设计与 Vue 的 shallowRef 类似。Solid 的 createSignal() API 设计强调了读、写隔离,暴露 getter、setter。Angular 放弃了脏检查,引入了自己的响应式实现
与 Vue 的 refs 相比,Solid 和 Angular 基于 getter 的 API 风格提供了一些有趣的权衡:
()
虽然比.value
写起来更省事儿,但是更新值的时候比较啰嗦。ref-unwrapping
(解包),访问值总是需要()
,这使得值在任何地方访问都是一致的。这也意味着你可以将原始的 signals 作为组件的 props 传递下去。用 Vue 的 shallowRef 和 triggerRef 也可以实现类似 Solid 和 Angular 的 API。
2. Chrome Headless 进化成完全体
Chrome Headless 无头模式进化成完全体,支持浏览器插件等浏览器级别的功能,利好自动化测试。
3. Next.js 13.2
4. Deno 1.31
5. Bun 新文档上线
下面我们来看技术资料。
技术资料
1. ts-reset
TypeScript 的 “CSS reset”,用于完善常见的 JS API 的类型。
2. TypeScript Brand type with Zod
Brand Type + 类型守卫 = 更安全的类型
Brand Type 说白了就是模拟名义子类型结构,保证代码调用的类型安全,再通过类型谓词 is 实现类型守卫做数据验证的逻辑,双重安全。(数据验证推荐使用 Zod)
3. 字节跳动 DevOps 交付流程演进之路
交付流程源于一系列现实的复杂性,如:业务、团队、技术,大公司的业务和团队会更加多元,技术也会更加复杂。
看字节如何破局:通过开放共建的流水线体系为底座,打造业务可自定义的自动化和协同流程。
4. magic-regexp
符合人体工程学的正则替代品,类型安全,爽。
周刊赞助
整理周刊要花费大量的精力和时间,你可以通过以下方式支持我:
订阅地址:https://hungryturbo.zhubai.love/
知识星球
好了,以上就是本期的食堂周刊,观众老爷们如果觉得还不错,一键三连是对食堂老板最大的支持。
你的前端食堂,吃好每一顿饭,我们下期见。
The text was updated successfully, but these errors were encountered: