Why does an optional property add a " | undefined" instead of just being an optional property?

Hi, this feels like such a basic question that it probably has an answer, but I don't understand why marking a arktype property as optional not just makes the corresponding inferred type property optional, without adding an additional | undefined? I encountered something similar with zod which had the result that my zod-type and database generated type did not match although they should.

Dummy example:
const schema = type({
  'name?': 'string',
  email: 'string.email'
});


// typeof schema.infer
//  {
//     email: string;
//     name?: string | undefined;
// }

type WhatIWanted = {
  name?: string;
  email: string;
}


https://github.com/colinhacks/zod/issues/3186
GitHub
I'm sorry if this is a duplicate, I could not find an existing issue or discussion that seemed to be exactly about the following. It's really rather simple: the following schema infers the ...
Was this page helpful?