【发布时间】:2023-01-24 00:36:46
【问题描述】:
我确实有一个外部 URL 端点大于2时返回字段对象数组,只有1时返回对象, 请参阅下面的 sn-p:
当字段计数为一时返回:
{
"fields": { "fullName": "fieldFullname", "type": "fieldType" }
}
当字段多于一个时返回:
{
"fields": [
{ "fullName": "fieldFullname", "type": "fieldType" },
{ "fullName": "fieldFullname", "type": "fieldType" }
]
}
目前,这是我使用 zod 的模式:
export const sObjectMetadataSchema = z.object({
fields: z.array(metadataFieldSchema).optional()
});
export const metadataFieldSchema = z.object({
fullName: z.string().optional(),
type: z.string().optional(),
});
它被配置为只接受一个对象数组。当它只返回一个字段时,它会抛出一个错误:
{
"code": "invalid_type",
"expected": "array",
"received": "object",
"path": [],
"message": "Expected array, received object"
}
我的目标是,如果它返回单个对象,它将在运行时将其转换为一个对象数组。目前正在尝试使用 transform 来实现,但仍然无法正常工作:
使用转换的初始实现:
export const sObjectMetadataSchema = z.object({
fields: z.unknown().transform((rel) => {
return Array.isArray(rel)
? z.array(metadataFieldSchema).optional()
: 'Convert the rel to Array?';
}),
});
【问题讨论】:
标签: reactjs typescript integration zod