import { BrsType, ValueKind } from "../brsTypes";
import { RuntimeError } from "../error/BrsError";
import type { Location } from "../lexer";
/**
 * Metadata describing a type mismatch error.
 * Used to construct detailed error messages with type and location information.
 */
export interface TypeMismatchMetadata {
    /**
     * The base message to use for this error. Should be as helpful as possible, e.g.
     * "Attempting to subtract non-numeric values".
     */
    message: string;
    /** The value on the left-hand side of a binary operator, or the *only* value for a unary operator. */
    left: TypeAndLocation;
    /** The value on the right-hand side of a binary operator. */
    right?: TypeAndLocation;
    cast?: boolean;
}
/**
 * Combines a BrightScript type with its source code location.
 * Used for tracking where type mismatches occur.
 */
export type TypeAndLocation = {
    /** The type of a value involved in a type mismatch. */
    type: BrsType | ValueKind;
    /** The location at which the offending value was resolved. */
    location: Location;
};
/**
 * Runtime error for type mismatches in operations or assignments.
 * Automatically formats error messages with the involved types.
 * Handles both binary operations (left/right) and unary operations or casts.
 */
export declare class TypeMismatch extends RuntimeError {
    /**
     * Creates a TypeMismatch error with formatted type information.
     * @param mismatchMetadata - Object containing message, types, locations, and cast flag
     */
    constructor(mismatchMetadata: TypeMismatchMetadata);
}
