pragmatic-fp-ts
Version:
Opinionated functional programming library with easy use in mind
33 lines (32 loc) • 1.55 kB
TypeScript
import { Either } from "./Either";
declare const nameProp = "__name";
type NameTag = {
[key in typeof nameProp]: string;
};
export type ValidatorFn<T = any> = ((_: unknown) => _ is T) & NameTag;
export type Validator<T> = ((x: unknown) => Either<T>) & NameTag;
export type ValidatorType<V extends Validator<any>> = V extends Validator<infer T> ? T : never;
type ValidatorOptions = {
decode?: boolean | ((_: string) => any);
};
export declare const from: <T>(name: string, validate: (_: unknown) => _ is T) => Validator<T>;
declare const _default: {
from: <T>(name: string, validate: (_: unknown) => _ is T) => Validator<T>;
any: Validator<any>;
array: <T_1>(validate: Validator<T_1>) => ((x: unknown, { decode }?: ValidatorOptions) => Either<T_1[], Error>) & NameTag;
boolean: Validator<boolean>;
dateString: Validator<string>;
dictionary: <T_2>(validate: Validator<T_2>) => Validator<Record<string, T_2>>;
enum: <T_3>(allowed: T_3[], name?: string) => Validator<T_3>;
nil: Validator<null | undefined>;
number: Validator<number>;
null: Validator<null>;
nullable: <T_4>(type_: Validator<T_4>) => Validator<T_4 | null>;
oneOf: <T_5>(...args: Validator<T_5>[]) => Validator<T_5>;
optional: <T_6>(type_: Validator<T_6>) => Validator<T_6 | undefined>;
record: <T_7 extends Record<string, any>>(schema: { [key in keyof T_7]: Validator<T_7[key]>; }) => Validator<T_7>;
string: Validator<string>;
undefined: Validator<undefined>;
unknown: Validator<unknown>;
};
export default _default;