Skip to content

optional ​

Делает значение необязательным. Если значение не передано (undefined) или пустая строка (''), проверка пропускается, а в результат попадает значение по умолчанию.

Сигнатура ​

ts
function optional<T>(schema: Schema<T>): Schema<T | undefined>
function optional<T>(schema: Schema<T>, default: T | (() => T)): Schema<T>

Параметры ​

ПараметрТипОписание
schemaSchema<T>Схема для значения, если оно передано
defaultT | (() => 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' }

См. также ​