You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 13:07:08