/**
 * Inference Utilities — Pure helper functions for type inference
 *
 * Contains shared utility functions used across inference sub-modules:
 * - collectResolutionArgTypes: spread-aware argument type collection
 * - deriveTypeFromNumericKind: NumericKind → IrType conversion
 * - makeOptionalReadType: add undefined to type for optional reads
 * - unwrapParens: strip parenthesized expression wrappers
 * - hasStaticModifier: check for static keyword on node
 * - isLambdaExpression: detect arrow/function expressions
 * - getNumericKindFromIrType: IrType → NumericKind lookup
 * - unwrapAwaitedForInference: unwrap Promise/Task wrappers
 * - buildFunctionTypeFromSignatureShape: create IrFunctionType from shape
 * - buildCallableOverloadFamilyType: merge overloads into intersection
 * - buildStructuralMethodFamilyType: structural method → callable type
 *
 * DAG position: leaf module — no circular deps
 */
import type { IrType, IrFunctionType, IrParameter, IrInterfaceMember, IrTypeParameter } from "../types/index.js";
import * as ts from "typescript";
import type { NumericKind } from "../types/numeric-kind.js";
export declare const collectResolutionArgTypes: (types: readonly (IrType | undefined)[]) => {
    readonly argumentCount: number;
    readonly argTypes: readonly (IrType | undefined)[];
};
/**
 * Derive IrType from NumericKind (deterministic, no TypeScript).
 * Mirrors the logic in literals.ts deriveTypeFromNumericIntent.
 */
export declare const deriveTypeFromNumericKind: (kind: NumericKind) => IrType;
export declare const makeOptionalReadType: (type: IrType) => IrType;
export declare const unwrapParens: (expr: ts.Expression) => ts.Expression;
export declare const hasStaticModifier: (node: ts.Node) => boolean;
export declare const isLambdaExpression: (expr: ts.Expression) => boolean;
export declare const getNumericKindFromIrType: (type: IrType) => NumericKind | undefined;
export declare const unwrapAwaitedForInference: (type: IrType) => IrType;
export declare const buildFunctionTypeFromSignatureShape: (parameters: readonly {
    readonly name: string;
    readonly type: IrType;
    readonly isOptional: boolean;
    readonly isRest: boolean;
    readonly mode?: IrParameter["passing"];
}[], returnType: IrType, typeParameters?: readonly IrTypeParameter[]) => IrFunctionType;
export declare const buildCallableOverloadFamilyType: (overloads: readonly IrFunctionType[]) => IrType;
export declare const buildStructuralMethodFamilyType: (members: readonly Extract<IrInterfaceMember, {
    kind: "methodSignature";
}>[]) => IrType | undefined;
//# sourceMappingURL=inference-utilities.d.ts.map