import { CdmCorpusContext, CdmObjectBase, CdmObjectDefinition, CdmObjectReference, CdmTraitCollection, ResolvedTraitSetBuilder, resolveOptions, VisitCallback } from '../internal';
export declare abstract class CdmObjectDefinitionBase extends CdmObjectBase implements CdmObjectDefinition {
    explanation: string;
    readonly exhibitsTraits: CdmTraitCollection;
    constructor(ctx: CdmCorpusContext);
    abstract getName(): string;
    abstract isDerivedFrom(base: string, resOpt?: resolveOptions): boolean;
    /**
     * @internal
     */
    copyDef(resOpt: resolveOptions, copy: CdmObjectDefinitionBase): void;
    /**
     * @internal
     * Creates a 'portable' reference object to this object. portable means there is no symbolic name set until this reference is placed
     * into some final document.
     */
    createPortableReference(resOpt: resolveOptions): CdmObjectReference;
    fetchObjectDefinitionName(): string;
    fetchObjectDefinition<T extends CdmObjectDefinition>(resOpt?: resolveOptions): T;
    /**
     * @internal
     */
    visitDef(pathFrom: string, preChildren: VisitCallback, postChildren: VisitCallback): boolean;
    /**
     * Given an initial path, returns this object's declared path
     * @internal
     */
    fetchDeclaredPath(pathFrom: string): string;
    /**
     * @internal
     */
    isDerivedFromDef(resOpt: resolveOptions, baseCdmObjectRef: CdmObjectReference, name: string, seek: string): boolean;
    /**
     * @internal
     */
    constructResolvedTraitsDef(baseCdmObjectRef: CdmObjectReference, rtsb: ResolvedTraitSetBuilder, resOpt: resolveOptions): void;
    /**
     * @internal
     */
    getObjectPath(): string;
    createSimpleReference(resOpt?: resolveOptions): CdmObjectReference;
}
