/**
 * Provides a fluent interface for checking preconditions on method arguments.
 *
 * @example
 *     function myFunction(name, email, age) {
 *         checkArg("name", name).isNotMissing().isNotEmpty();
 *         checkArg("email", email).matches(".+@.+..+");
 *         checkArg("age", age).isGreaterThanOrEqualTo(
 *             18,
 *             "No minors allowed."
 *         );
 *
 *         // ...
 *     }
 *
 * @param parameter The name of the method parameter.
 * @param value The argument value to check.
 */
export declare function checkArg<T>(parameter: string, value: T): ArgumentChecker<T>;
/**
 * A fluent interface for performing assertions on a method argument. When an
 * assertion fails, an Error of type {@link ArgumentError} (or one of its
 * subtypes) will be thrown.
 */
export interface ArgumentChecker<T> {
    /**
     * Ensures that the argument is defined.
     */
    isDefined(message?: string): ArgumentChecker<T>;
    /**
     * Ensures that the argument is not empty.
     */
    isNotEmpty(message?: string): ArgumentChecker<T>;
    /**
     * Ensures that the argument is not null or undefined.
     */
    isNotMissing(message?: string): ArgumentChecker<T>;
    /**
     * Ensures that the argument is not null.
     */
    isNotNull(message?: string): ArgumentChecker<T>;
    /**
     * Ensures that the argument matches the given regular expression.
     */
    matches(pattern: string | RegExp, message?: string): ArgumentChecker<T>;
    /**
     * Ensures that the argument falls within a certain range (inclusive).
     */
    isInRange(min: number, max: number, message?: string): ArgumentChecker<T>;
    /**
     * Ensures that the value satisfies a predicate.
     */
    satisfies(predicate: (value: T) => boolean, message?: string): ArgumentChecker<T>;
}
/**
 * Intended to be used as the default case of a switch statement that covers all
 * values of a string union. This will yield a typing error if the string union
 * gets updated and all cases are not covered. This function simply throws the
 * error, if one is passed in as an argument; otherwise it returns undefined.
 *
 * @param value The value being checked against the values of a string union.
 * @param error The optional error to throw.
 */
export declare function assertNever(value: never, error?: Error): undefined;
