export interface IIntegraMeta {
    metaRif: IMeta;
}
export interface IMeta {
    /** nome originale, non si dovrebbe mai configurare, fare con cura*/
    nomeOriginale?: string;
    /** questo parametro è fondamentalmente configurabile, si consiglia pero di farlo concidere con quello del nome originale. da maneggiare con cura*/
    nomeVariante?: string;
}
export interface ICompare {
    Compara(item1: IMeta, item2: IMeta): 0 | 1 | -1;
}
export declare class Meta implements IMeta, ICompare {
    nomeOriginale: string;
    nomeVariante: string;
    constructor(item: IMeta);
    Compara(item: Meta): 0 | 1 | -1;
    Mergia(item: Meta, funzioneMerge?: (item: Meta) => Meta): void;
    GetThis(): this;
}
export interface IsMerge {
    Mergia(item: ListaMeta): void;
}
export declare class ListaMeta extends Array<Meta> implements IsMerge {
    constructor();
    Mergia(item: ListaMeta): void;
    CercaSeNoAggiungi(item: Meta): Meta;
    Cerca(item: Meta): Meta | undefined;
    AggiungiElemento(item: Meta): Meta;
}
export declare function GetListaClasseMeta<T>(metaKey: metadataKey, ifNonEsiste?: () => T): T;
export declare function SalvaListaMetaClasse(metaKey: metadataKey, item: ListaMeta): undefined;
export declare type metadataKey = 'nomeMetadataKeyTargetFor_Metadata' | 'nomeMetadataKeyTargetFor_Express' | 'nomeMetadataKeyTargetFor_Postgres';
