import { ITypeSuite, TType } from "./types"; import { IErrorDetail } from "./util"; /** * Export functions used to define interfaces. */ export { TArray, TEnumType, TEnumLiteral, TFunc, TIface, TLiteral, TName, TOptional, TParam, TParamList, TProp, TTuple, TType, TUnion, TIntersection, array, enumlit, enumtype, func, iface, lit, name, opt, param, tuple, union, intersection, BasicType, ITypeSuite, } from "./types"; export { VError, IErrorDetail } from './util'; export interface ICheckerSuite { [name: string]: Checker; } /** * Takes one of more type suites (e.g. a module generated by `ts-interface-builder`), and combines * them into a suite of interface checkers. If a type is used by name, that name should be present * among the passed-in type suites. * * The returned object maps type names to Checker objects. */ export declare function createCheckers(...typeSuite: ITypeSuite[]): ICheckerSuite; /** * Checker implements validation of objects, and also includes accessors to validate method calls. * Checkers should be created using `createCheckers()`. */ export declare class Checker { private suite; private ttype; private _path; private props; private checkerPlain; private checkerStrict; constructor(suite: ITypeSuite, ttype: TType, _path?: string); /** * Set the path to report in errors, instead of the default "value". (E.g. if the Checker is for * a "person" interface, set path to "person" to report e.g. "person.name is not a string".) */ setReportedPath(path: string): void; /** * Check that the given value satisfies this checker's type, or throw Error. */ check(value: any): void; /** * A fast check for whether or not the given value satisfies this Checker's type. This returns * true or false, does not produce an error message, and is fast both on success and on failure. */ test(value: any): boolean; /** * Returns an error object describing the errors if the given value does not satisfy this * Checker's type, or null if it does. */ validate(value: any): IErrorDetail | null; /** * Check that the given value satisfies this checker's type strictly. This checks that objects * and tuples have no extra members. Note that this prevents backward compatibility, so usually * a plain check() is more appropriate. */ strictCheck(value: any): void; /** * A fast strict check for whether or not the given value satisfies this Checker's type. Returns * true or false, does not produce an error message, and is fast both on success and on failure. */ strictTest(value: any): boolean; /** * Returns an error object describing the errors if the given value does not satisfy this * Checker's type strictly, or null if it does. */ strictValidate(value: any): IErrorDetail | null; /** * If this checker is for an interface, returns a Checker for the type required for the given * property of this interface. */ getProp(prop: string): Checker; /** * If this checker is for an interface, returns a Checker for the argument-list required to call * the given method of this interface. E.g. if this Checker is for the interface: * interface Foo { * find(s: string, pos?: number): number; * } * Then methodArgs("find").check(...) will succeed for ["foo"] and ["foo", 3], but not for [17]. */ methodArgs(methodName: string): Checker; /** * If this checker is for an interface, returns a Checker for the return value of the given * method of this interface. */ methodResult(methodName: string): Checker; /** * If this checker is for a function, returns a Checker for its argument-list. */ getArgs(): Checker; /** * If this checker is for a function, returns a Checker for its result. */ getResult(): Checker; /** * Return the type for which this is a checker. */ getType(): TType; /** * Actual implementation of check() and strictCheck(). */ private _doCheck; private _doValidate; private _getMethod; } /** * Typed checker interface. Adds type guard functionality to a normal `Checker`. * * To use, cast a `Checker` to a `CheckerT<>` using the appropriate type. * * eg. * import { MyInterface } from './my-interface'; * import MyInterfaceTi from './my-interface-ti'; * * const checkers = createCheckers(MyInterfaceTi) as { * MyInterface: CheckerT * }; * * TODO: * - Enable `check()` and `strictCheck()` type assertion definitions once the functionality * is correctly working in TypeScript. (https://github.com/microsoft/TypeScript/issues/36931) */ export interface CheckerT extends Checker { test(value: any): value is T; strictTest(value: any): value is T; }