123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- 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<MyInterface>
- * };
- *
- * 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<T> extends Checker {
- test(value: any): value is T;
- strictTest(value: any): value is T;
- }
|