reviewed
Version:
Ergonomic, extensible and lightweight validators.
18 lines (17 loc) • 509 B
TypeScript
import { Annotated } from "./records";
export interface Valid<T> {
valid: true;
input: unknown;
parsed: T;
error: null;
}
export interface Invalid<T> {
valid: false;
input: unknown;
parsed: null;
error: ValidationErrors<T>;
}
export type ValidationErrors<T> = string | string[] | Annotated<T> | Annotated<T>[];
export type Validated<T> = Valid<T> | Invalid<T>;
export type Validator<T> = (input: unknown) => Validated<T>;
export type Guard<T> = (input: unknown) => input is T;