我想解析依赖于基类型的不同模式的数组:
// Simple example
const typeA = z.object({ prop: z.string() });
const typeB = typeA.extend({
extraProp: z.boolean(),
});
我try 了以下模式:
const schema = z.array(z.union([typeA, typeB]));
问题是当我解析数据时,typeB
项被解析为type A
,所以extraProp
从输出中删除
const data = schema.parse([{ prop: 'foo', extraProp: true }]);
// => [{"prop":"foo"}]
当我将typeB
作为联合的第一项时,它似乎输出了正确的类型,但当发送错误的数据时,它被解析为typeA
:
const schema = z.array(z.union([typeB, typeA]));
const data = schema.parse([{ prop: 'foo', extraProp: true }]);
// => [{"prop":"foo","extraProp":true}]
...
const data = schema.parse([{ prop: 'foo', extraProp: 4 }]);
// => [{"prop":"foo"}] - should fail here
是我的模式错了,还是Zod做不到呢?