Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit ae0dbe1

Browse filesBrowse files
committed
Partial record
1 parent 1021d3c commit ae0dbe1
Copy full SHA for ae0dbe1

File tree

Expand file treeCollapse file tree

5 files changed

+38
-23
lines changed
Open diff view settings
Filter options
Expand file treeCollapse file tree

5 files changed

+38
-23
lines changed
Open diff view settings
Collapse file

‎packages/zod/src/v4/classic/schemas.ts‎

Copy file name to clipboardExpand all lines: packages/zod/src/v4/classic/schemas.ts
+2-2Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1359,11 +1359,11 @@ export function partialRecord<Key extends core.$ZodRecordKey, Value extends core
13591359
keyType: Key,
13601360
valueType: Value,
13611361
params?: string | core.$ZodRecordParams
1362-
): ZodRecord<Key, ZodOptional<Value>> {
1362+
): ZodRecord<Key & core.$partial, Value> {
13631363
return new ZodRecord({
13641364
type: "record",
13651365
keyType: union([keyType, never()]),
1366-
valueType: optional(valueType),
1366+
valueType: valueType as any,
13671367
...util.normalizeParams(params),
13681368
}) as any;
13691369
}
Collapse file

‎packages/zod/src/v4/classic/tests/record.test.ts‎

Copy file name to clipboardExpand all lines: packages/zod/src/v4/classic/tests/record.test.ts
+4Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -335,4 +335,8 @@ test("partial record", () => {
335335
const schema = z.partialRecord(z.string(), z.string());
336336
type schema = z.infer<typeof schema>;
337337
expectTypeOf<schema>().toEqualTypeOf<Partial<Record<string, string>>>();
338+
339+
const Keys = z.enum(["id", "name", "email"]).or(z.never());
340+
const Person = z.partialRecord(Keys, z.string());
341+
expectTypeOf<z.infer<typeof Person>>().toEqualTypeOf<Partial<Record<"id" | "name" | "email", string>>>();
338342
});
Collapse file

‎packages/zod/src/v4/core/schemas.ts‎

Copy file name to clipboardExpand all lines: packages/zod/src/v4/core/schemas.ts
+29-16Lines changed: 29 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2376,30 +2376,42 @@ export interface $ZodRecordDef<Key extends $ZodRecordKey = $ZodRecordKey, Value
23762376
valueType: Value;
23772377
}
23782378

2379+
// export type $InferZodRecordOutput<
2380+
// Key extends $ZodRecordKey = $ZodRecordKey,
2381+
// Value extends SomeType = $ZodType,
2382+
// > = undefined extends Key["_zod"]["values"]
2383+
// ? string extends core.output<Key>
2384+
// ? Record<core.output<Key>, core.output<Value>>
2385+
// : number extends core.output<Key>
2386+
// ? Record<core.output<Key>, core.output<Value>>
2387+
// : symbol extends core.output<Key>
2388+
// ? Record<core.output<Key>, core.output<Value>>
2389+
// : Record<core.output<Key>, core.output<Value>>
2390+
// : Record<core.output<Key>, core.output<Value>>;
23792391
export type $InferZodRecordOutput<
23802392
Key extends $ZodRecordKey = $ZodRecordKey,
23812393
Value extends SomeType = $ZodType,
2382-
> = undefined extends Key["_zod"]["values"]
2383-
? string extends core.output<Key>
2384-
? Record<core.output<Key>, core.output<Value>>
2385-
: number extends core.output<Key>
2386-
? Record<core.output<Key>, core.output<Value>>
2387-
: symbol extends core.output<Key>
2388-
? Record<core.output<Key>, core.output<Value>>
2389-
: Record<core.output<Key>, core.output<Value>>
2394+
> = Key extends $partial
2395+
? Partial<Record<core.output<Key>, core.output<Value>>>
23902396
: Record<core.output<Key>, core.output<Value>>;
23912397

2398+
// export type $InferZodRecordInput<
2399+
// Key extends $ZodRecordKey = $ZodRecordKey,
2400+
// Value extends SomeType = $ZodType,
2401+
// > = undefined extends Key["_zod"]["values"]
2402+
// ? string extends core.input<Key>
2403+
// ? Record<core.input<Key>, core.input<Value>>
2404+
// : number extends core.input<Key>
2405+
// ? Record<core.input<Key>, core.input<Value>>
2406+
// : symbol extends core.input<Key>
2407+
// ? Record<core.input<Key>, core.input<Value>>
2408+
// : Record<core.input<Key>, core.input<Value>>
2409+
// : Record<core.input<Key>, core.input<Value>>;
23922410
export type $InferZodRecordInput<
23932411
Key extends $ZodRecordKey = $ZodRecordKey,
23942412
Value extends SomeType = $ZodType,
2395-
> = undefined extends Key["_zod"]["values"]
2396-
? string extends core.input<Key>
2397-
? Record<core.input<Key>, core.input<Value>>
2398-
: number extends core.input<Key>
2399-
? Record<core.input<Key>, core.input<Value>>
2400-
: symbol extends core.input<Key>
2401-
? Record<core.input<Key>, core.input<Value>>
2402-
: Record<core.input<Key>, core.input<Value>>
2413+
> = Key extends $partial
2414+
? Partial<Record<core.input<Key>, core.input<Value>>>
24032415
: Record<core.input<Key>, core.input<Value>>;
24042416

24052417
export interface $ZodRecordInternals<Key extends $ZodRecordKey = $ZodRecordKey, Value extends SomeType = $ZodType>
@@ -2408,6 +2420,7 @@ export interface $ZodRecordInternals<Key extends $ZodRecordKey = $ZodRecordKey,
24082420
isst: errors.$ZodIssueInvalidType | errors.$ZodIssueInvalidKey<Record<PropertyKey, unknown>>;
24092421
}
24102422

2423+
export type $partial = { "~~partial": true };
24112424
export interface $ZodRecord<Key extends $ZodRecordKey = $ZodRecordKey, Value extends SomeType = $ZodType>
24122425
extends $ZodType {
24132426
_zod: $ZodRecordInternals<Key, Value>;
Collapse file

‎packages/zod/src/v4/mini/schemas.ts‎

Copy file name to clipboardExpand all lines: packages/zod/src/v4/mini/schemas.ts
+2-2Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1023,11 +1023,11 @@ export function partialRecord<Key extends core.$ZodRecordKey, Value extends Some
10231023
keyType: Key,
10241024
valueType: Value,
10251025
params?: string | core.$ZodRecordParams
1026-
): ZodMiniRecord<Key, ZodMiniOptional<Value>> {
1026+
): ZodMiniRecord<Key & core.$partial, Value> {
10271027
return new ZodMiniRecord({
10281028
type: "record",
10291029
keyType: union([keyType, never()]),
1030-
valueType: optional(valueType),
1030+
valueType: valueType as any,
10311031
...util.normalizeParams(params),
10321032
}) as any;
10331033
}
Collapse file

‎play.ts‎

Copy file name to clipboard
+1-3Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import { z } from "zod/v4";
1+
import { z } from "zod/v4-mini";
22

33
z;
4-
const A = z.partialRecord(z.string(), z.string());
5-
type A = z.infer<typeof A>;

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.