import { TypeAttributeKind, type TypeAttributes } from "./TypeAttributes"; export declare function initTypeNames(): void; export type NameOrNames = string | TypeNames; export declare const tooManyNamesThreshold = 1000; export declare abstract class TypeNames { readonly distance: number; static makeWithDistance(names: ReadonlySet, alternativeNames: ReadonlySet | undefined, distance: number): TypeNames; static make(names: ReadonlySet, alternativeNames: ReadonlySet | undefined, areInferred: boolean): TypeNames; constructor(distance: number); get areInferred(): boolean; abstract get names(): ReadonlySet; abstract get combinedName(): string; abstract get proposedNames(): ReadonlySet; abstract add(namesArray: TypeNames[], startIndex?: number): TypeNames; abstract clearInferred(): TypeNames; abstract makeInferred(): TypeNames; abstract singularize(): TypeNames; abstract toString(): string; } export declare class RegularTypeNames extends TypeNames { readonly names: ReadonlySet; private readonly _alternativeNames; constructor(names: ReadonlySet, _alternativeNames: ReadonlySet | undefined, distance: number); add(namesArray: TypeNames[], startIndex?: number): TypeNames; clearInferred(): TypeNames; get combinedName(): string; get proposedNames(): ReadonlySet; makeInferred(): TypeNames; singularize(): TypeNames; toString(): string; } export declare class TooManyTypeNames extends TypeNames { readonly names: ReadonlySet; constructor(distance: number, name?: string); get combinedName(): string; get proposedNames(): ReadonlySet; add(namesArray: TypeNames[], startIndex?: number): TypeNames; clearInferred(): TypeNames; makeInferred(): TypeNames; singularize(): TypeNames; toString(): string; } export declare const namesTypeAttributeKind: TypeAttributeKind; export declare function modifyTypeNames(attributes: TypeAttributes, modifier: (tn: TypeNames | undefined) => TypeNames | undefined): TypeAttributes; export declare function singularizeTypeNames(attributes: TypeAttributes): TypeAttributes; export declare function makeNamesTypeAttributes(nameOrNames: NameOrNames, areNamesInferred?: boolean): TypeAttributes;