optional
Делает значение необязательным. Если значение не передано (undefined) или пустая строка (''), проверка пропускается, а в результат попадает значение по умолчанию.
Сигнатура
ts
function optional<T>(schema: Schema<T>): Schema<T | undefined>
function optional<T>(schema: Schema<T>, default: T | (() => T)): Schema<T>Параметры
| Параметр | Тип | Описание |
|---|---|---|
schema | Schema<T> | Схема для значения, если оно передано |
default | T | (() => T) | Значение по умолчанию или функция, которая его возвращает |
Особенности
nullне считается отсутствием значения — для него естьnullable. Если допустимо и то, и другое:optional(nullable(string())).- Без
defaultполе вobjectстановится необязательным в типе (name?: string) и не попадает вdata, если его не передали. - Для массивов и объектов передавайте функцию:
optional(array(string()), () => []). Иначе все результаты будут ссылаться на один и тот же массив. - Оборачивайте
pipeснаружи:optional(pipe(string(), email())). Наоборот —pipe(optional(...), email())— TypeScript не даст, потому чтоemailне умеет работать сundefined.
Примеры
Необязательные поля
ts
const Profile = object({
name: string(),
website: optional(pipe(string(), pattern(/^https?:\/\//))),
lang: optional(oneOf(['ru', 'en']), 'ru'),
});
validate(Profile, { name: 'Ivan', website: '' }).data; // { name: 'Ivan', lang: 'ru' }