[Zod] Use Zod Schemas partially using shape and unwrap
Instead of creating many small schemas, which can complicate maintenance, Zod allows for the extraction of specific parts of a schema using the concept of ".shape". It "unwraps" the object schema, enabling access to sub-schemas within specific properties.
Additionally, we can use the .unwrap
to get into element schemas of altered schemas such as .optional
or .array
.
Simplify working with complex schemas without the need to break them into hundreds of small schemas.
import { z } from 'zod'
const roomBookingSchema = z.object({
roomType: z.literal('suite'),
dueDate: z.string().date(),
numberOfGuests: z.number().min(1).max(4),
price: z.number().positive(),
amenities: z.array(z.string()).optional(),
guestDetails: z.array(
z.object({
name: z.string(),
age: z.number().min(0),
email: z.string().email(),
})
),
})
Schema vs Shape
Schema is mainly use for validation. But you are NOT able to do roomBookingSchema.roomType
Using shape, we are able to access each prop:
const roomBookingShape = roomBookingSchema.shape
// .array(), need to use .element to get the Object schema inside array
const guestDetailsSchema = roomBookingShape.guestDetails.element
type GuestDetails = z.infer<typeof guestDetailsSchema>
type GuestDetails_ = z.infer<typeof guestDetailsSchema>['guestDetails'][number]
// .array().optional(), for optional() we need to use unwrap() first to get z.string()
const amenitiesElementSchema = roomBookingShape.amenities.unwrap().element
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
2024-03-04 [Rust] ref keyword for borrow value
2024-03-04 [Rust] if let & while let
2024-03-04 [Rust] Using .map_err instead of wrap which cause panic
2024-03-04 [Rust] Using Box<dyn error::Error>> return one of miultiple error types at runtime
2022-03-04 [AWS Explained] Security
2020-03-04 [AST Babel] Babel Template
2020-03-04 [HTML5] Layout Reflow & thrashing