/**
 * Expression converter helpers — numeric kind extraction, this-type inference,
 * parenthesis unwrapping, unknown-type checking, identifier storage type resolution,
 * and nullish stripping.
 */
import * as ts from "typescript";
import type { IrType, NumericKind } from "./types.js";
import type { ProgramContext } from "./program-context.js";
/**
 * Extract the NumericKind from a type node if it references a known numeric alias.
 *
 * Examples:
 * - `int` → "Int32"
 * - `byte` → "Byte"
 * - `long` → "Int64"
 * - `string` → undefined (not numeric)
 */
export declare const getNumericKindFromTypeNode: (typeNode: ts.TypeNode) => NumericKind | undefined;
export declare const inferThisType: (node: ts.Node) => IrType | undefined;
export declare const inferYieldReceivedType: (node: ts.YieldExpression, ctx: ProgramContext) => IrType | undefined;
export declare const unwrapParens: (node: ts.Expression) => ts.Expression;
export declare const isExplicitUnknownTypeNode: (node: ts.TypeNode | undefined) => boolean;
export declare const hasExplicitUnknownStorageInitializer: (node: ts.Expression | undefined) => boolean;
export declare const shouldPreserveExplicitStorageType: (ctx: ProgramContext, declId: ReturnType<ProgramContext["binding"]["resolveIdentifier"]>, fromDecl: IrType | undefined, fromEnv: IrType | undefined) => boolean;
export declare const getIdentifierStorageType: (ctx: ProgramContext, declId: ReturnType<ProgramContext["binding"]["resolveIdentifier"]>, fromDecl: IrType | undefined, fromEnv: IrType | undefined) => IrType | undefined;
export declare const stripNullish: (type: IrType | undefined) => IrType | undefined;
//# sourceMappingURL=expression-converter-helpers.d.ts.map