Skip to content

fallback ​

A value used instead of an error. Handy for query parameters and settings: ?page=abc gives page: 1 instead of a 422 response.

Signature ​

ts
function fallback<T>(schema: Schema<T>, value: T | ((input: unknown) => T)): Schema<T>

Parameters ​

ParameterTypeDescription
schemaSchema<T>The value schema
valueT | (input) => TThe value on error, or a function that receives the raw input and returns a replacement

Notes ​

  • Works for any schema error, including an empty value — so a separate optional is not needed.
  • Errors of async checks (checkAsync) are not hidden: by the time they resolve, the value is already chosen.
  • Don't use it for data where errors matter (forms, creating records) — the user won't know they entered something wrong.

Example ​

ts
// GET /products?page=abc&limit=1000&sort=price
const Query = object({
  page: fallback(pipe(coerce.number(), integer(), min(1)), 1),
  limit: fallback(pipe(coerce.number(), integer(), min(1), max(100)), 20),
  sort: fallback(oneOf(['date', 'price', 'name']), 'date'),
});

parse(Query, req.query); // { page: 1, limit: 20, sort: 'price' }

See also ​