[英]Zod promise rejection: ZodError always returns empty array
我想驗證來自后端的數據,我希望這些數據類似於這個 typescript 形狀
export interface Booking {
locationId: string;
bookingId: number;
spotId: string;
from: string;
to: string;
status: "pending" | "confirmed" | "closed";
}
所以我寫了 zod 模式和驗證器 function ,如下所示:
const bookingOnLoadResponse = z.array(
z.object({
locationId: z.string(),
bookingId: z.number(),
spotId: z.string(),
status: z.literal("pending" || "confirmed" || "closed"),
from: z.string(),
to: z.string(),
})
);
export function bookingOnLoadValidator(bookingArray: unknown) {
return bookingOnLoadResponse.parse(bookingArray);
}
現在我知道問題出在狀態字段上,因為它是最近添加的,我在日志中看到響應中缺少該字段,但從 Zod 我得到的是:
[Unhandled promise rejection: ZodError: []
at http://10.3.42.237:19000/node_modules/expo/AppEntry.bundle?platform=ios&dev=true&hot=false&strict=false&minify=false:226607:293 in _createSuperInternal
at node_modules/zod/lib/ZodError.js:29:8 in constructor
at node_modules/zod/lib/types.js:29:22 in handleResult
at node_modules/zod/lib/types.js:120:23 in ZodType#parse
at utils/zodSchemas/bookingResponseSchema.ts:16:9 in bookingOnLoadValidator
at utils/fetchFunctions.ts:28:9 in fetchBookings
有沒有辦法更詳細地描述導致問題的原因? 謝謝
我的猜測是 promise 拒絕是parse
拋出的結果。 如果從 promise 的回調中或從async
function 調用它,那么最終結果將是 promise 拒絕。
如果無法解析您指定的模式,則parse
將拋出異常。 如果您的數據形狀與您的預期不同,那么它會拋出。 很難確切地說為什么它會在沒有看到JSON
的情況下拋出,但我猜你對status
的定義不正確。
||
將被評估為邏輯或表達式,因此"pending" || "confirmed" || "closed"
"pending" || "confirmed" || "closed"
"pending" || "confirmed" || "closed"
解析為"pending"
(因為“待處理”是真值, ||
將解析為鏈中的第一個值為真值)。 因此,狀態的其他值將導致解析失敗。
嘗試
status: z.enum(["pending", "confirmed", "closed"]),
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.