[API reference](https://evolu.dev/docs/api-reference) › [@evolu/common](https://evolu.dev/docs/api-reference/common) › [Type](https://evolu.dev/docs/api-reference/common/Type) › optional

```ts
function optional<T>(
  type: ValidateOptionalPropertyType<T>,
): OptionalProperty<T>;
```

Defined in: [packages/common/src/Type.ts:10298](https://github.com/evoluhq/evolu/blob/037c390af081e9944d616ff298a729515c5c5ab7/packages/common/src/Type.ts#L10298)

Optional [object](https://evolu.dev/docs/api-reference/common/Type/functions/object) property.

An optional property may be absent. If present, its value is validated by the
provided Type, so optionality does not implicitly accept `undefined`. Use
[undefinedOr](https://evolu.dev/docs/api-reference/common/Type/functions/undefinedOr) when a present property may contain `undefined`.

### Example

```ts

const User = object({
  name: String,
  nickname: optional(String),
  preferredName: optional(undefinedOr(String)),
});

assertOk(User.fromUnknown({ name: "Ada" }), { name: "Ada" });
assertOk(User.fromUnknown({ name: "Ada", preferredName: undefined }), {
  name: "Ada",
  preferredName: undefined,
});
```