/**
 * Primitive type conversion
 *
 * INVARIANT A: "number" always emits as C# "double". No exceptions.
 * INVARIANT B: "int" always emits as C# "int". No exceptions.
 *
 * These are distinct types, not decorated versions of each other.
 */
import * as ts from "typescript";
import { IrType, IrPrimitiveType } from "../../../types.js";
/**
 * CLR numeric type names from @tsonic/core.
 * When user writes `: int`, it becomes primitiveType(name="int"), NOT referenceType.
 *
 * Note: `int` and `char` are supported as distinct primitives.
 * Other CLR numerics remain as referenceType for now and are handled by the emitter.
 */
export declare const CLR_PRIMITIVE_TYPE_SET: Set<string>;
/**
 * Convert TypeScript primitive keyword to IR type
 */
export declare const convertPrimitiveKeyword: (kind: ts.SyntaxKind) => IrType | null;
/**
 * Check if a type name is a TS primitive type (string, number, boolean, null, undefined)
 */
export declare const isPrimitiveTypeName: (typeName: string) => typeName is "string" | "number" | "boolean" | "null" | "undefined";
/**
 * Check if a type name is a CLR primitive type (int)
 * These come from @tsonic/core and are compiler-known primitives.
 */
export declare const isClrPrimitiveTypeName: (typeName: string) => typeName is "int" | "char";
/**
 * Get primitive type IR representation for a TS primitive type name
 */
export declare const getPrimitiveType: (typeName: "string" | "number" | "boolean" | "null" | "undefined") => IrPrimitiveType;
/**
 * Get primitive type IR representation for a CLR primitive type name
 */
export declare const getClrPrimitiveType: (typeName: "int" | "char") => IrPrimitiveType;
//# sourceMappingURL=primitives.d.ts.map