如何将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
相关产品推荐
相关产品推荐

