import { Options } from "../Compiler";
import { Assembly, Node, Typed } from "../ast";
import * as ast from "../ast";
import { ScopeContext } from "../createScopeMaps";
declare type Resolved = {
    get<T>(t: T): T;
};
export declare const inferType: {
    [P in keyof typeof ast]?: (node: InstanceType<typeof ast[P]>, c: InferContext) => any;
};
export declare const typeProperties: Set<string>;
declare class InferContext extends ScopeContext {
    resolved: Map<Typed, Typed> & Resolved;
    options: Options;
    constructor(root: any, options: Options);
    semanticError(message: any, node: Node): void;
    isAssignable(node: any): boolean;
    setResolved(originalNode: any, currentNode: any): void;
    getResolved(node: any): any;
}
export default function inferTypes(root: Assembly, options: Options): any;
export {};
