Skip to content

Breaking behavior for .default(...).transform(...) chain when used in a partial object #6321

Description

@JuanoD

Given the next snippet:

import { z } from "zod/v4";

const arrayFromString = z
  .string()
  .default("")
  .transform((val) => (val ? val.split(",").map((s) => s.trim()) : []));

const partialObj = z.object({ array: arrayFromString }).partial();

console.log(
  arrayFromString.safeParse(undefined).data,
  partialObj.safeParse({}).data?.array,
);

4.3.6 logged [] [] while 4.4.3 logs [] undefined

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions