Optional Fields
By default, all fields mentioned in the schema of obj
are required. However, you can make a field optional explicitly.
In case you do not care how exactly the field is optional, you can use the or
in combination with noting
:
ts
import { obj, str, num, or, nothing } from '@withease/contracts';
const UserWithOptionalAge = obj({
name: str,
age: or(num, nothing),
});
In the example above, the age
field can be either a number or missing or null
or undefined
.
Only null
In case you expect a field to have null
as a value, you can add it to the field definition as follows:
ts
import { obj, str, num, or, val } from '@withease/contracts';
const UserWithOptionalAge = obj({
name: str,
age: or(num, val(null)),
});
Only undefined
If you expect a field to be missing, you can pass undefined
as a value:
WARNING
In @withease/contracts
, undefined
as a field value is the same as a missing field. If you need to differentiate between the two, you can fallback to more powerful tools like Zod or Runtypes.
ts
import { obj, str, num, or, val } from '@withease/contracts';
const UserWithPossibleNoAge = obj({
name: str,
age: or(num, val(undefined)),
});