【发布时间】:2023-02-17 06:16:41
【问题描述】:
这个递归的discriminated union如何转化为zod呢?
interface TextInput {
type: 'text-input'
}
interface Group {
type: 'group';
components: AppComponent[]
}
type AppComponent = TextInput | Group
const component: AppComponent = {
type: 'group',
components: [{
type: 'text-input'
}],
}
zod 版本会是什么样子?
我的尝试:
import { z } from 'zod';
const TextInputSchema = z.object({
type: z.literal('text-input'),
});
const GroupSchema = z.object({
type: z.literal('group'),
components: z.array(ComponentSchema),
});
const ComponentSchema = z.discriminatedUnion('type', [TextInputSchema, GroupSchema]);
但由于[...] type is referenced directly or indirectly in its own initializer 的错误,这不起作用。
【问题讨论】:
-
你需要
z.lazy或其他
标签: typescript zod