/**
 * Record type expansion and type assignability helpers.
 *
 * Contains expandRecordType for expanding Record<K, T> to IrObjectType,
 * flattenUnionIrType, and isProvablyAssignable.
 */
import * as ts from "typescript";
import { IrType, IrObjectType } from "../../../types.js";
import type { Binding } from "../../../binding/index.js";
/**
 * Expand Record<K, T> to IrObjectType when K is a finite set of literal keys.
 *
 * DETERMINISTIC IR TYPING (INV-0 compliant):
 * Uses AST-based analysis only. Extracts literal keys from TypeNode,
 * not from ts.Type.
 *
 * Gating conditions:
 * - Returns null if K contains type parameters (generic context)
 * - Returns null if K is string or number (should remain IrDictionaryType)
 * - Returns null if K contains non-literal types
 */
export declare const expandRecordType: (node: ts.TypeReferenceNode, binding: Binding, convertType: (node: ts.TypeNode, binding: Binding) => IrType) => IrObjectType | null;
type TriBool = true | false | null;
export declare const flattenUnionIrType: (type: IrType) => readonly IrType[];
export declare const isProvablyAssignable: (source: IrType, target: IrType) => TriBool;
export {};
//# sourceMappingURL=mapped-utility-record.d.ts.map