0Pricing
tRPC End-to-End Type Safe APIs · 课时

转换与细化 Zod 数据

通过转换解析后的值并使用 Zod 添加自定义细化规则,掌握超越基础验证的数据处理方式。

转换与细化 Zod 数据 是 CoddyKit 上的免费 tRPC End-to-End Type Safe APIs 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 tRPC End-to-End Type Safe APIs 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 tRPC End-to-End Type Safe APIs 课程共包含 4 节课。

本课时的部分内容尚未翻译,以英文显示。

Beyond Pass/Fail

Zod does more than accept or reject data. It can transform valid input into a cleaner shape and apply custom rules that built-in validators cannot express.

The transform Method

.transform() changes a value after it passes validation, producing a new output type.

const trimmed = z.string().transform((s) => s.trim());
trimmed.parse("  hi  "); // "hi"

Coercing Types

Zod can coerce inputs, useful for query strings that arrive as text but should be numbers.

const page = z.coerce.number().int().positive();
page.parse("5"); // 5 as a number

Default Values

Provide a fallback when a field is missing.

const schema = z.object({
  limit: z.number().default(20),
});
schema.parse({}); // { limit: 20 }

Custom Refinements

.refine() adds a custom boolean check with a message when it fails.

const password = z.string().refine(
  (val) => val.length >= 8,
  { message: "Too short" }
);

Cross-Field Validation

Refine an object to compare two fields, like confirming a password.

const form = z.object({
  pw: z.string(),
  confirm: z.string(),
}).refine((d) => d.pw === d.confirm, {
  message: "Passwords must match",
  path: ["confirm"],
});

superRefine for Multiple Errors

.superRefine() lets you push several issues in one pass for richer validation.

const s = z.string().superRefine((val, ctx) => {
  if (!/[A-Z]/.test(val)) ctx.addIssue({ code: "custom", message: "Need uppercase" });
  if (!/[0-9]/.test(val)) ctx.addIssue({ code: "custom", message: "Need digit" });
});

Chaining Transforms

Validation and transformation chain in order.

const slug = z.string()
  .min(1)
  .transform((s) => s.toLowerCase().replace(/\s+/g, "-"));
slug.parse("Hello World"); // "hello-world"

Input vs Output Types

After a transform, the input type and output type differ. Use z.input and z.output to read each.

type In = z.input<typeof page>;   // string | number
type Out = z.output<typeof page>; // number

Safe Parsing

Use safeParse to get a result object instead of throwing, ideal for handling errors gracefully.

const r = password.safeParse("short");
if (!r.success) console.log(r.error.issues);

Pipe for Validate-then-Transform

Use .pipe() to first coerce or transform a value and then run further validation on the result.

const id = z.string().transform(Number).pipe(z.number().int());

Quick Check

Test your Zod knowledge.

Recap

You leveled up your Zod schemas:

  • transform and coerce reshape valid data
  • refine / superRefine add custom and cross-field rules
  • safeParse handles errors without throwing

These tools turn Zod into a powerful data shaping and validation layer.

常见问题解答

「转换与细化 Zod 数据」课时是免费的吗?

是的 — 「转换与细化 Zod 数据」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 tRPC End-to-End Type Safe APIs 课程的其余内容,请升级到 CoddyKit PRO。 tRPC End-to-End Type Safe APIs 课程共包含 4 节课。

「转换与细化 Zod 数据」这节课中我会学到什么?

通过转换解析后的值并使用 Zod 添加自定义细化规则,掌握超越基础验证的数据处理方式。 你通过在浏览器中直接运行的动手代码来练习 tRPC End-to-End Type Safe APIs,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 tRPC End-to-End Type Safe APIs 需要有经验吗?

无需任何先前经验。CoddyKit 上的 tRPC End-to-End Type Safe APIs 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「转换与细化 Zod 数据」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 tRPC End-to-End Type Safe APIs 课中编写并运行代码吗?

能。每节 tRPC End-to-End Type Safe APIs 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. Zod 模式简介
  2. 定义复杂的 Zod 模式
  3. 在 tRPC 过程中集成 Zod
  4. 转换与细化 Zod 数据
← 返回 tRPC End-to-End Type Safe APIs