我確實有一個外部 URL 端點,當它超過 2 時回傳一個欄位物件陣列,當只有一個時回傳一個物件,請參見下面的代碼段:
當欄位計數為 1 時回傳:
{
"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"
}
我的目標是,如果它回傳一個物件,它將在運行時將其轉換為物件陣列。目前正在嘗試實作 usingtransform
但仍然無法正常作業:
使用變換的初始實作:
export const sObjectMetadataSchema = z.object({
fields: z.unknown().transform((rel) => {
return Array.isArray(rel)
? z.array(metadataFieldSchema).optional()
: 'Convert the rel to Array?';
}),
});
uj5u.com熱心網友回復:
我沒有測驗,但似乎應該作業:
const FieldsSchema = z.object({
fullName: z.string(),
type: z.string()
});
export const sObjectMetadataSchema = z.object({
fields: z.union([FieldsSchema, FieldsSchema.array()]).transform((rel) => {
return Array.isArray(rel)
? rel
: [rel];
}),
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/516213.html
標籤:反应打字稿一体化佐德
上一篇:元素隱式具有“任何”型別,因為“任何”型別的運算式不能用于索引型別“{}”
下一篇:如何獲取插槽或插槽元素作為參考?