/**
 * Support Types Recognition - Detect and work with _support/types.d.ts marker types.
 *
 * This module provides type guards and helpers to recognize special CLR interop types
 * that don't have JavaScript equivalents: TSByRef, TSUnsafePointer, TSDelegate, etc.
 *
 * @see spec/support-types.md for complete documentation
 */
import * as ts from "typescript";
/**
 * Support type kind enumeration.
 * Represents the different marker types from _support/types.d.ts.
 */
export type SupportTypeKind = "TSByRef" | "TSUnsafePointer" | "TSDelegate" | "TSNullable" | "TSFixed" | "TSStackAlloc";
/**
 * Information about a recognized support type.
 */
export type SupportTypeInfo = {
    readonly kind: SupportTypeKind;
    readonly wrappedType: ts.Type;
    readonly typeArguments: readonly ts.Type[];
};
/**
 * Check if a type is a support type (TSByRef, TSUnsafePointer, etc.).
 *
 * @param type - TypeScript type to check
 * @param checker - TypeScript type checker
 * @returns Support type info if recognized, undefined otherwise
 */
export declare const getSupportTypeInfo: (type: ts.Type, _checker: ts.TypeChecker) => SupportTypeInfo | undefined;
/**
 * Check if a type is TSByRef<T>.
 *
 * @param type - TypeScript type to check
 * @param checker - TypeScript type checker
 * @returns True if type is TSByRef<T>
 */
export declare const isTSByRef: (type: ts.Type, checker: ts.TypeChecker) => boolean;
/**
 * Check if a type is TSUnsafePointer<T>.
 *
 * @param type - TypeScript type to check
 * @param checker - TypeScript type checker
 * @returns True if type is TSUnsafePointer<T>
 */
export declare const isTSUnsafePointer: (type: ts.Type, checker: ts.TypeChecker) => boolean;
/**
 * Check if a type is TSDelegate<TArgs, TReturn>.
 *
 * @param type - TypeScript type to check
 * @param checker - TypeScript type checker
 * @returns True if type is TSDelegate<TArgs, TReturn>
 */
export declare const isTSDelegate: (type: ts.Type, checker: ts.TypeChecker) => boolean;
/**
 * Check if a type is TSNullable<T>.
 *
 * @param type - TypeScript type to check
 * @param checker - TypeScript type checker
 * @returns True if type is TSNullable<T>
 */
export declare const isTSNullable: (type: ts.Type, checker: ts.TypeChecker) => boolean;
/**
 * Check if a type is TSFixed<T, N>.
 *
 * @param type - TypeScript type to check
 * @param checker - TypeScript type checker
 * @returns True if type is TSFixed<T, N>
 */
export declare const isTSFixed: (type: ts.Type, checker: ts.TypeChecker) => boolean;
/**
 * Check if a type is TSStackAlloc<T>.
 *
 * @param type - TypeScript type to check
 * @param checker - TypeScript type checker
 * @returns True if type is TSStackAlloc<T>
 */
export declare const isTSStackAlloc: (type: ts.Type, checker: ts.TypeChecker) => boolean;
/**
 * Extract the wrapped type from TSByRef<T>.
 *
 * @param type - TypeScript type (must be TSByRef<T>)
 * @param checker - TypeScript type checker
 * @returns Wrapped type T, or undefined if not TSByRef
 */
export declare const getTSByRefWrappedType: (type: ts.Type, checker: ts.TypeChecker) => ts.Type | undefined;
/**
 * Extract the wrapped type from TSUnsafePointer<T>.
 *
 * @param type - TypeScript type (must be TSUnsafePointer<T>)
 * @param checker - TypeScript type checker
 * @returns Wrapped type T, or undefined if not TSUnsafePointer
 */
export declare const getTSUnsafePointerWrappedType: (type: ts.Type, checker: ts.TypeChecker) => ts.Type | undefined;
/**
 * Check if any support type is unsupported (unsafe pointers, fixed buffers, stackalloc).
 *
 * @param type - TypeScript type to check
 * @param checker - TypeScript type checker
 * @returns Error message if unsupported, undefined if supported
 */
export declare const checkUnsupportedSupportType: (type: ts.Type, checker: ts.TypeChecker) => string | undefined;
//# sourceMappingURL=support-types.d.ts.map