typescript - 基于 Zod 模式将接口(interface)通用化

标签 typescript typescript-typings typescript-generics 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 模式的接口(interface),确保 schema 包含所述模式,并且 process 接受一个 obj 在模式 TypeScript 类型的参数中。

最佳答案

z.ZodSchema 是一个通用类,您可以在其中定义所需架构的类型。

基本上,您应该将界面重构为以下内容:

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

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

检查here

关于typescript - 基于 Zod 模式将接口(interface)通用化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74718183/

相关文章:

XMLHTTPRequest 的 Angular 2 打字问题

typescript - 递归构建 typescript 类型

typescript - 使用 Typescript 从 switch case 返回类型推断

angular - 将 http 响应映射到 typeScript 对象

javascript - 为什么 typescript 不允许在字符串中调用 concat |字符串 [] 类型?

typescript - 为什么某些 Typescript 模块名称以字符串形式给出?

node.js - 为 Nightmare 延长打字时间

带有函数参数的 typescript 泛型

Typescript:区分条件类型中的泛型联合

typescript - 如何声明类型的 "transposed"版本?