You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 16:50:44