Where can be used
- validate http request from client (at server side)
- validate http response from server (at client side)
- validate data from untyped storage, for example localStorage, JSON columns in DB, etc.
- validate env variables
- validate CLI arguments
- validate configuration files
- validate data from URL (query params)
Features
- Basic validation - can validate static types at runtime (can be restricted to JSON type)
- Serialisation / deserialisation - for example, TS/JS supports
Date
, but JSON doesn’t. So you need to do conversion in order to support it - Compatibility with other schemas - there are tools which can convert from- or to- another schemas, for example JSONSchema, OpenAPI etc
- Strict or permissive mode - would object be accepted if it contains extra fields
- Helpful error messages - if in case of failed validation it points what exactly went wrong or simply dismisses the input
- AOT (ahead of time) - can it use type information in order to produce validation libraries or faster serialiser, deserialiser
- Custom types - can user create custom types, for example type for email, instead of string
Libraries
Not a full list, but rather a high level overview
Fast
-
typia
- Doesn’t need extra schema definition. Uses AOT to generate validators, serialisers and deserialisers directly from TypeScript types
- Supports protocol buffers
-
typebox
- Supports all JSON, JS, JSONSchema, but for TS discriminated unions you need to use typebox-validators
- Can use JIT (and AOT?)
-
ts-runtime-checks
- Uses AOT
See: Runtype Benchmarks
Popular
Other
- typeschema
- valibot
- adonisjs/validator
- io-ts and newtype-ts
- deepkit runtime types
- runtypes
- superstruct
- safen
- arktype
- rescript-struct
- ts-json-validator
- valita
- to-typed
- fastest-validator
- runtypes
- computed_types
- subshape
- effect-ts/schema
- TypeRunner
- jointz
- ts-auto-guard
- tserial
- ts-runtime