import type { StringIndexable } from '../BaseTypes';
export type Replacer<T> = (instance: T) => T;
export interface RegistryInterface<RegistryMap extends object, M = StringIndexable<RegistryMap>> {
    has<K extends keyof M>(name: K): boolean;
    get<K extends keyof M>(name: K): NonNullable<M[K]>;
    maybeSet<K extends keyof M>(name: K, instance: NonNullable<M[K]>): void;
    maybeSetAndGet<K extends keyof M>(name: K, defaultValue: NonNullable<M[K]>): NonNullable<M[K]>;
    set<K extends keyof M>(name: K, instance: NonNullable<M[K]>): void;
    addReplacer<K extends keyof M>(name: K, replacer: Replacer<NonNullable<M[K]>>): void;
    delete<K extends keyof M>(name: K): boolean;
}
