gpt4 book ai didi

zod(或 toZod): how to model "type" field in discriminated union

转载 作者:行者123 更新时间:2023-12-05 05:37:57 32 4
gpt4 key购买 nike

我有这种类型:

export interface ConnectorForModel {
_type: "connector.for.model",
connectorDefinitionId: string
}

我想建模为 zod 架构。实际上我正在使用 toZod,像这样:

export const ConnectorForModelZod: toZod<ConnectorForModel> = z.object({
_type: z.literal("connector.for.model"),
connectorDefinitionId: z.string()
});

我得到了这个类型错误:

Type 'ZodLiteral<"connector.for.model">' is not assignable to type 'never'.

正确的表达方式是什么?

最佳答案

我认为最快的方法是使用 ZodType:

import { z } from "zod";

export interface ConnectorForModel {
_type: "connector.for.model";
connectorDefinitionId: string;
}

export const ConnectorForModelZod: z.ZodType<ConnectorForModel> = z.object({
_type: z.literal("connector.for.model"),
connectorDefinitionId: z.string()
});

旁白:我倾向于根据我的 zod 架构定义我的类型,而不是相反。如果您无法控制您正在使用的类型,那么给定的方法就是可行的方法,但您可以避免使用 zod 上的 z.TypeOf 两次编写相同的代码模式

type ConnectorForModel = z.TypeOf<typeof ConnectorForModelZod>;

此类型等同于您的接口(interface)。

关于zod(或 toZod): how to model "type" field in discriminated union,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73021231/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com