Elegant and battle-tested validation library for type-safe input data for TypeScript.
Basic example
import { array, isoDate, number, object, optional, string } from 'decoders'; // Incoming data at runtime, e.g. the request body // The point is that this data is untrusted and its type unknown const externalData = { id: 123, name: 'Alison Roberts', createdAt: '2026-01-11T12:26:37.024Z', tags: ['foo', 'bar'], }; // Write the decoder (= what you expect the data to look like) const userDecoder = object({ id: number, name: string, createdAt: optional(isoDate), tags: array(string), }); // Call .verify() on the incoming data const user = userDecoder.verify(externalData); // ^^^^ // TypeScript will infer this type as: // { // id: number; // name: string; // createdAt?: Date; // tags: string[]; // }
Installation
npm install decoders
Requirements
You must set strict: true in your tsconfig.json in order for type inference to work
correctly!
// tsconfig.json { "compilerOptions": { "strict": true } }
Documentation
Documentation can be found on decoders.cc.
There is a dedicated page that explains how to build your own decoders.
