如何使用Zod验证包含字符串与字符串数组的混合数组结构?
用Zod验证混合类型数组的正确方法
你之前的Schema错误在于使用了z.string().and(z.array(z.string())),这要求数组中的每个元素同时既是字符串又是数组,逻辑上不可能实现,因此才会出现两个矛盾的错误提示。
要验证['foo', ['bar', 'baz']]这种元素可同时为字符串或字符串数组的混合数组,正确做法是用z.union定义元素的可选类型:
import { z } from 'zod'; const mixedArraySchema = z.array( z.union([ z.string(), z.array(z.string()) ]) ); // 验证测试 const testData = ['foo', ['bar', 'baz']]; const result = mixedArraySchema.safeParse(testData); console.log(result.success); // 输出 true
如果后续需要基于元素类型做差异化处理,也可以使用z.discriminatedUnion,但对于当前验证需求,z.union已足够满足。
内容的提问来源于stack exchange,提问作者Cjmarkham
相关产品推荐
相关产品推荐

