import type { DataDomain } from './DataDomain.js';
export interface DomainElementSchema {
    /**
     * The kind of the domain element.
     */
    kind: string;
    /**
     * The unique key of the domain element.
     */
    key: string;
}
export declare abstract class DomainElement implements DomainElementSchema {
    #private;
    /**
     * A reference to the root DataDomain instance.
     */
    protected root: DataDomain;
    /**
     * The root DataDomain instance.
     */
    get domain(): DataDomain;
    abstract accessor kind: string;
    /**
     * The unique key of the domain element.
     */
    get key(): string;
    /**
     * The key of the DataDomain this element belongs to.
     * In a data domain that has foreign namespaces, this is the key of the namespace this element originally belongs to.
     *
     * It might be different from the `domain.key` if the element is a foreign object.
     */
    get namespace(): string;
    /**
     * @param root The root DataDomain instance.
     * @param key The unique key of the domain element.
     */
    constructor(root: DataDomain, key: string);
}
//# sourceMappingURL=DomainElement.d.ts.map