import type { IrType } from "./ir-types.js";
export type IrSpreadTupleShape = {
    readonly prefixElementTypes: readonly IrType[];
    readonly restElementType?: IrType;
};
export declare const referenceTypeIdentity: (type: Extract<IrType, {
    kind: "referenceType";
}>) => string | undefined;
export declare const stripGlobalClrAlias: (name: string) => string;
export declare const getClrIdentityKey: (rawName: string, typeArgumentArity?: number) => string;
export declare const referenceTypeHasClrIdentity: (type: Extract<IrType, {
    kind: "referenceType";
}>, rawNames: Iterable<string>) => boolean;
export declare const isAwaitableIrType: (type: IrType) => boolean;
export declare const getAwaitedIrType: (type: IrType) => IrType | undefined;
export declare const unwrapAsyncWrapperType: (type: IrType) => IrType | undefined;
export declare const getSpreadTupleShape: (type: IrType) => IrSpreadTupleShape | undefined;
export declare const stableIrTypeKey: (type: IrType) => string;
export declare const stableIrTypeKeyIfDeterministic: (type: IrType) => string | undefined;
export type LocalTypeIdentityState = {
    readonly opaqueIds: WeakMap<object, number>;
    readonly active: WeakSet<object>;
    nextOpaqueId: number;
};
export declare const createLocalTypeIdentityState: () => LocalTypeIdentityState;
export declare const localTypeIdentityKey: (type: IrType, state: LocalTypeIdentityState) => string;
export declare const runtimeUnionCarrierFamilyKey: (type: Extract<IrType, {
    kind: "unionType";
}>) => string;
export declare const irTypesEqual: (left: IrType, right: IrType) => boolean;
export type NormalizedUnionTypeOptions = {
    readonly preserveRuntimeLayout?: true;
    readonly runtimeCarrierFamilyKey?: string;
    readonly runtimeCarrierName?: string;
    readonly runtimeCarrierNamespace?: string;
    readonly runtimeCarrierTypeParameters?: readonly string[];
    readonly runtimeCarrierTypeArguments?: readonly IrType[];
};
export type RuntimeUnionAliasCarrierOptions = {
    readonly aliasName: string;
    readonly fullyQualifiedName: string;
    readonly namespaceName?: string;
    readonly typeParameters?: readonly string[];
    readonly typeArguments?: readonly IrType[];
};
export declare const runtimeUnionAliasCarrierFamilyKey: (fullyQualifiedName: string) => string;
export declare const hasRuntimeUnionCarrierShape: (type: IrType) => boolean;
export declare const stampRuntimeUnionAliasCarrier: (type: IrType, options: RuntimeUnionAliasCarrierOptions) => IrType;
export declare const normalizedUnionType: (types: readonly IrType[], options?: NormalizedUnionTypeOptions) => IrType;
//# sourceMappingURL=type-ops.d.ts.map