Skip to content

coerce ​

Приведение типов для данных, которые приходят строками: query-параметры, FormData, переменные окружения, CSV.

Сигнатура ​

ts
coerce.string(msg?: Message): Schema<string>
coerce.number(msg?: Message): Schema<number>
coerce.boolean(msg?: Message): Schema<boolean>
coerce.date(msg?: Message): Schema<Date>

Параметры ​

ПараметрТипОписание
msgMessageСвоё сообщение. Заменяет сообщения по умолчанию для всех ошибок этой схемы

Что во что превращается ​

ФункцияПреобразованиеЗатем проверяется как
coerce.string()число, boolean, bigint → String(value)string()
coerce.number()строка → обрезка пробелов → Number(value). Пустая строка остаётся пустойnumber()
coerce.boolean()'true', '1', 'on', 'yes', 1 → true; 'false', '0', 'off', 'no', 0 → false. Регистр не важенboolean()
coerce.date()непустая строка или число → new Date(value)date()

Значения, которые уже нужного типа, не меняются. Неподходящие значения дают обычную ошибку типа: coerce.number() на 'abc' → Must be a number.

Коды ошибок ​

Такие же, как у соответствующей схемы: required и string / number / boolean / date.

Примеры ​

Query-параметры ​

ts
// GET /products?page=2&limit=20&inStock=1
const Query = object({
  page: optional(pipe(coerce.number(), integer(), min(1)), 1),
  limit: optional(pipe(coerce.number(), integer(), max(100)), 20),
  inStock: optional(coerce.boolean(), false),
});

parse(Query, req.query); // { page: 2, limit: 20, inStock: true }

FormData ​

ts
const data = validate(Form, Object.fromEntries(new FormData(form)));

См. также ​

  • preprocess — своё приведение
  • parse — пример с переменными окружения