@rbxts/rotype
Version:
Advanced runtime type checking library
19 lines (18 loc) • 839 B
TypeScript
import { Ctx } from "./context";
import { Issue } from "./errors";
import { Result } from "./result";
export type Shape = {
readonly [k: string]: Schema<any, any>;
};
export interface Schema<I, O = I> {
kind: string;
shape?: Shape;
inner?: Schema<any, any>;
item?: Schema<any, any>;
_parse(data: unknown, ctx: Ctx): Result<O, Issue[]>;
}
export type InferInput<S> = S extends Schema<infer I, unknown> ? I : never;
export type InferOutput<S> = S extends Schema<unknown, infer O> ? O : never;
export declare function parse<S extends Schema<any, any>>(schema: S, data: unknown): Result<InferOutput<S>, Issue[]>;
export declare function is<S extends Schema<any, any>>(schema: S, data: unknown): data is InferOutput<S>;
export declare function CreateTypeOf<T extends keyof CheckableTypes>(typeName: T): () => Schema<T>;