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>Параметры
| Параметр | Тип | Описание |
|---|---|---|
msg | Message | Своё сообщение. Заменяет сообщения по умолчанию для всех ошибок этой схемы |
Что во что превращается
| Функция | Преобразование | Затем проверяется как |
|---|---|---|
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 — пример с переменными окружения