import * as ts from 'typescript';
import type { MetadataGenerator } from '../generator';
import type { Extension } from './extension';
import type { Type } from './type';
type UsableDeclaration = ts.InterfaceDeclaration | ts.ClassDeclaration | ts.PropertySignature | ts.TypeAliasDeclaration | ts.EnumMember;
interface TypeNodeResolverContext {
    [name: string]: ts.TypeReferenceNode | ts.TypeNode;
}
export interface UtilityTypeOptions {
    keys: Array<string | number | boolean>;
}
export declare class TypeNodeResolver {
    private readonly typeNode;
    private readonly current;
    private readonly parentNode?;
    private context;
    private readonly referencer;
    constructor(typeNode: ts.TypeNode, current: MetadataGenerator, parentNode?: ts.Node, context?: TypeNodeResolverContext, referencer?: ts.TypeNode);
    static clearCache(): void;
    resolve(): Type;
    private static toUtilityType;
    private static getUtilityTypeOptions;
    private filterUtilityProperties;
    private static resolveSpecialReference;
    private static getLiteralValue;
    private getPrimitiveType;
    private getDateType;
    private static getDesignatedModels;
    private getEnumerateType;
    private getReferenceType;
    private getTypeAliasReference;
    private getModelReference;
    private static getRefTypeName;
    private attemptToResolveKindToPrimitive;
    private contextualizedName;
    private handleCachingAndCircularReferences;
    private createCircularDependencyResolver;
    private static nodeIsUsable;
    private getModelTypeDeclaration;
    private hasFlag;
    private getSymbolAtLocation;
    private getModelProperties;
    private propertyFromSignature;
    private propertyFromDeclaration;
    private getModelAdditionalProperties;
    private typeArgumentsToContext;
    private getModelInheritedProperties;
    private hasPublicModifier;
    private hasStaticModifier;
    private isAccessibleParameter;
    private getNodeDescription;
    private static getNodeFormat;
    private getNodeExample;
    protected getNodeExtensions(node: UsableDeclaration | ts.PropertyDeclaration | ts.ParameterDeclaration | ts.EnumDeclaration): Extension[];
}
export {};
//# sourceMappingURL=module.d.ts.map