import { Program } from './types';
/**
 * Represents a type checking error or warning
 */
export interface TypeCheckError {
    message: string;
    line: number;
    column: number;
    code: string;
    snippet: string;
    severity: 'error' | 'warning';
}
/**
 * Stable error codes for type checking diagnostics
 */
export declare const TypeCheckErrorCode: {
    readonly TypeMismatch: "TYPE_NOT_ASSIGNABLE";
};
export type TypeCheckErrorCode = (typeof TypeCheckErrorCode)[keyof typeof TypeCheckErrorCode];
/**
 * Result of type checking operation
 */
export interface TypeCheckResult {
    errors: TypeCheckError[];
    warnings: TypeCheckError[];
}
/**
 * Represents a type in the SomonScript type system
 */
export interface Type {
    kind: string;
    name?: string;
    elementType?: Type;
    types?: Type[];
    properties?: Map<string, PropertyType>;
    returnType?: Type;
    baseType?: Type;
}
/**
 * Represents a property type with optional flag
 */
export interface PropertyType {
    type: Type;
    optional: boolean;
}
/**
 * Type checker for SomonScript AST
 * Provides comprehensive type checking with Tajik Cyrillic type annotations
 */
export declare class TypeChecker {
    private errors;
    private warnings;
    private symbolTable;
    private interfaceTable;
    private typeAliasTable;
    private sourceLines;
    constructor(source?: string);
    /**
     * Initialize primitive types in the symbol table
     */
    private initializePrimitiveTypes;
    private getSnippet;
    /**
     * Perform type checking on the entire program
     * @param program - The AST program to type check
     * @returns Type checking result with errors and warnings
     */
    check(program: Program): TypeCheckResult;
    private collectTypeDefinitions;
    private collectInterface;
    private collectTypeAlias;
    private collectClass;
    private checkStatement;
    private checkVariableDeclaration;
    private bindPatternTypes;
    private checkFunctionDeclaration;
    private checkClassDeclaration;
    private resolveTypeNode;
    private resolvePrimitiveType;
    private resolveArrayType;
    private resolveUnionType;
    private resolveIntersectionType;
    private resolveTupleType;
    private resolveGenericType;
    private resolveUniqueType;
    private resolveIdentifierType;
    private resolveNamedType;
    private mapTajikToPrimitive;
    private inferExpressionType;
    private inferLiteralType;
    private inferIdentifierType;
    private inferObjectType;
    private inferCallType;
    private inferNewExpressionType;
    private isAssignable;
    private isExactMatch;
    private isArrayAssignable;
    private isTupleAssignable;
    private isArrayToTupleAssignable;
    private isUnionAssignable;
    private isIntersectionAssignable;
    private isInterfaceAssignable;
    private isClassAssignable;
    private isUniqueAssignable;
    private typeToString;
    private isStructurallyCompatible;
    private mapPrimitiveToTajik;
    private addError;
    private addWarning;
}
//# sourceMappingURL=type-checker.d.ts.map