如何使用Zod在TypeScript中校验对象是否匹配接口f的结构?
用Zod校验对象是否匹配接口结构
TypeScript的interface只是编译时类型约束,编译后会被移除,没法直接用它做运行时校验。既然你已经引入了Zod,直接用Zod定义对应接口的schema就能实现运行时校验。
步骤1:定义与接口f对应的Zod Schema
把接口的结构转换成Zod的schema,还可以基于schema自动推导类型,避免重复定义:
import { z } from "zod"; // 定义匹配interface f的Zod schema const FSchema = z.object({ tmp: z.number() }); // 基于schema推导类型,替代手动写interface type f = z.infer<typeof FSchema>; // 如果要保留原interface,确保它和schema结构一致即可 // interface f { // tmp: number; // }
步骤2:用Schema校验对象
Zod提供两种常用校验方式:
parse:校验不通过时直接抛出错误,适合确定输入符合预期的场景safeParse:校验不通过时返回包含错误信息的对象,不会抛出错误,适合需要处理校验失败的场景
示例:用parse校验
const validObj = { tmp: 123 }; const invalidObj = { tmp: "123" }; // 校验通过,返回原对象 FSchema.parse(validObj); // 校验失败,抛出ZodError错误 FSchema.parse(invalidObj);
示例:用safeParse校验
const result = FSchema.safeParse(invalidObj); if (result.success) { // 校验通过,result.data是符合类型的对象 console.log("校验通过", result.data); } else { // 校验失败,result.error包含详细错误信息 console.log("校验失败", result.error.issues); }
这样就能在运行时准确校验对象是否符合interface f的结构了。
内容的提问来源于stack exchange,提问作者IWProgrammer
相关产品推荐
相关产品推荐

