网站搜索

typescript - 基于 Zod 模式转换接口泛型


我有这个接口 I:

import { z } from "zod";

const schema = z.object({
  name: z.string(),
});

type S = z.infer<typeof schema>;

interface I {
  process: (obj: S) => object;
  schema: z.ZodSchema;
}

它包含一个 Zod 架构和一个用于处理已验证结果的函数。(假设我有充分的理由不在 process 函数中进行验证。)

我想把它变成一个接口,该接口基于 Zod 模式,确保 schema 包含所述的模式,并且 process 接受一个符合模式 TypeScript 类型的 obj 作为参数。

答案#1

z.ZodSchema 是一个通用类,你可以在其中定义你想要的模式类型。

基本上,你应该将你的接口重构为如下内容:

interface I<T> {
  process: (obj: T) => object;
  schema: z.ZodSchema<T>;
}

现在 I.schema 接受具有给定类型的 z.ZodSchema,与 I.process 函数使用的类型相同。

在这里查看