amirfarzamnia/zod-deep-partial(新しいタブで開きます)
主要言語: TypeScript
A utility to recursively make all properties in a Zod schema optional.
- star 数
- 10
- watcher 数
- 1
- fork 数
- 0
- issue 数
- 2
- 最終更新
- 2026/08/15
主要言語: TypeScript
A utility to recursively make all properties in a Zod schema optional.
Warning
Archived: This project is no longer maintained. Zod has added native deep partial functionality. See Zod PR #5928.
Note
This project was created as a temporary solution after Zod removed its deepPartial functionality, with the goal of providing this functionality until it could be added back to Zod. See Zod issue #2854.
Zod has now added deep partial functionality again through PR #5928. As a result, this project is being archived and will not receive further updates. Thank you to everyone who used, contributed to, or supported this project.
A utility to recursively make all properties in a Zod schema optional.
zod-deep-partial is a lightweight, zero-dependency package that provides a single function, zodDeepPartial. This function takes any Zod schema and returns a new schema where every property at every level of nesting is optional. This is particularly useful for creating schemas for patch updates or for handling incomplete data structures without sacrificing the benefits of Zod's validation.
z.object)z.array)z.union)z.discriminatedUnion)z.intersection)z.tuple)z.record)z.map)z.set)z.promise)z.lazy)z.readonly)z.default)z.catch)z.prefault)z.nonoptional)z.pipe, .transform())zod as a peer dependency.Install the package using your favorite package manager:
npm install zod-deep-partial
yarn add zod-deep-partial
pnpm add zod-deep-partial
Here's a simple example of how to use zodDeepPartial:
import { z } from "zod"; import { zodDeepPartial } from "zod-deep-partial"; // 1. Define your base schema const userSchema = z.object({ name: z.string(), email: z.email(), profile: z.object({ bio: z.string(), avatar: z.url(), }), tags: z.array(z.string()), }); // 2. Create the deep partial schema const partialUserSchema = zodDeepPartial(userSchema); // 3. Use the partial schema for validation // All of these are now valid: partialUserSchema.parse({}); partialUserSchema.parse({ name: "John Doe" }); partialUserSchema.parse({ profile: {} }); partialUserSchema.parse({ profile: { bio: "A developer" } }); partialUserSchema.parse({ tags: ["developer"] }); // Type inference is preserved type PartialUser = z.infer<typeof partialUserSchema>; /* { name?: string | undefined; email?: string | undefined; profile?: { bio?: string | undefined; avatar?: string | undefined; } | undefined; tags?: (string | undefined)[] | undefined; } */
Contributions are welcome! Please open an issue or submit a pull request on the GitHub repository.
This project is licensed under the MIT License. See the LICENSE file for details.