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

如何将TypeScript接口I泛型化以适配Zod Schema?

改造后的泛型接口实现

你可以通过定义泛型接口,将Zod Schema的类型与process函数的参数类型绑定,确保二者严格对应。改造后的代码如下:

import { z } from "zod";

// 泛型接口,T约束为任意合法的Zod类型
interface I<T extends z.ZodTypeAny> {
  // process参数类型自动匹配泛型T对应的Schema类型
  process: (obj: z.infer<T>) => object;
  // schema字段类型为具体的Zod Schema实例类型T
  schema: T;
}

使用示例

创建符合该接口的对象时,TypeScript会自动根据传入的Schema推断process参数的类型:

// 定义具体的Zod Schema
const userSchema = z.object({
  name: z.string(),
});

// 创建接口实例,TypeScript自动推断T为typeof userSchema
const userProcessor: I<typeof userSchema> = {
  schema: userSchema,
  process(obj) {
    // obj类型自动推导为{ name: string },编辑器会提供完整类型提示
    return { processedName: obj.name.toUpperCase() };
  },
};

核心逻辑说明

  • 泛型T被约束为z.ZodTypeAny,确保只能传入合法的Zod Schema类型。
  • z.infer<T>通过泛型T自动提取Schema对应的TypeScript类型,保证process的参数类型与Schema完全一致。
  • 赋值时TypeScript会自动校验schema字段的类型,同时同步约束process函数的参数类型,避免手动指定类型导致的不匹配问题。

内容的提问来源于stack exchange,提问作者user13203487

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 05:25:51