import { type ClassType, type Type, type TypeObjectLiteral, type TypePropertySignature } from './model';
export declare function unwrapValueType(type: Type): Type;
export declare function mergedIntersectionObjectLiteral(type: Type): TypeObjectLiteral | undefined;
export declare function mergeStructuredProperties(type: Type): TypePropertySignature[];
export declare function objectLiteralPropertiesFromType(type: TypeObjectLiteral, seen?: Set<Type>): TypePropertySignature[];
export declare function objectLiteralIndexType(type: TypeObjectLiteral, seen?: Set<Type>): Type | undefined;
export declare function isMarkerType(type: Type): boolean;
export declare function allowsUndefined(type: Type): boolean;
export declare function allowsNull(type: Type): boolean;
export declare function resolveClassType(value: ClassType | (() => ClassType)): ClassType;
export declare function tryResolveClassType(value: ClassType | (() => ClassType)): ClassType | undefined;
export declare function normalizeTypeMetadata(value: unknown, seen?: Set<unknown>): void;
export declare function isClass(value: unknown): value is ClassType;
export declare function expandUtilityTypeMetadata(record: Record<string, unknown>): void;
export declare function recordPropertiesFromKeyType(keyType: Type, valueType: Type): TypePropertySignature[];
export declare function recordLiteralKeysFromType(type: Type): Array<string | number>;
export declare function flattenRuntimeUnionTypes(type: Type): Type[];
export declare function isExtractAssignable(source: Type, target: Type): boolean;
export declare function typesOverlap(left: Type, right: Type): boolean;
export declare function literalMatchesType(value: unknown, type: Type): boolean;
export declare function utilitySourcePropertiesFromType(type: Type): TypePropertySignature[];
export declare function mergeUtilityProperties(properties: TypePropertySignature[]): TypePropertySignature[];
export declare function cloneUtilityProperty(property: TypePropertySignature): TypePropertySignature;
export declare function isUtilityTypeName(value: unknown): value is 'Pick' | 'Omit' | 'Partial' | 'Required' | 'Extract' | 'Record' | 'OptionalNulls';
export declare function getUtilityTypeName(record: Record<string, unknown>): 'Pick' | 'Omit' | 'Partial' | 'Required' | 'Extract' | 'Record' | 'OptionalNulls' | undefined;
export declare function visitType(type: Type, visitor: (type: Type) => void): void;
export declare function visitTypeSurface(type: Type, visitor: (type: Type) => void): void;
export declare function findNested<T>(type: Type, predicate: (type: Type) => T | undefined): T | undefined;
export declare function findNestedSurface<T>(type: Type, predicate: (type: Type) => T | undefined): T | undefined;
export declare function hasNestedType(type: Type, predicate: (type: Type) => boolean): boolean;
export declare function literalNumber(type: Type | undefined): number | undefined;
export declare function resolveRuntimeValue(type: Type | undefined): unknown;
export declare function joinPath(base: string, key: string): string;
//# sourceMappingURL=type-utils.d.ts.map