如何在Zod中定义包含自引用数组的MediaResponseSchema?
解决Zod递归Schema定义问题
你想要实现的是递归结构的Zod Schema,直接在声明过程中引用未完成定义的MediaResponseSchema会触发初始化错误,因为此时变量还未完成赋值。正确的做法是使用Zod提供的z.lazy()方法延迟引用当前Schema:
正确实现代码
import { z } from "zod"; export const MediaResponseSchema = z.object({ mediaId: z.number(), childMedias: z.array(z.lazy(() => MediaResponseSchema)), });
原理说明
z.lazy()接受一个返回Schema的函数,它会在Zod实际执行解析逻辑时才调用这个函数,此时MediaResponseSchema已经完成了初始化声明,就能正确实现递归引用。- 如果需要给
childMedias设置默认值(比如空数组),可以追加.default([]):childMedias: z.array(z.lazy(() => MediaResponseSchema)).default([]),
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

