declare namespace OO { interface RegistryEventMap { register: [name: string, data: unknown]; unregister: [name: string, data: unknown]; } /** * A map interface for associating arbitrary data with a symbolic name. Used in * place of a plain object to provide additional {@link OO.Registry.register registration} * or {@link OO.Registry.lookup lookup} functionality. * * See . */ interface Registry extends EventEmitter { /** * Associate one or more symbolic names with some data. * * Any existing entry with the same name will be overridden. * * @param name Symbolic name or list of symbolic names * @param data Data to associate with symbolic name * @throws {Error} Name argument must be a string or array */ register(name: string | string[], data: any): void; /** * Remove one or more symbolic names from the registry. * * @param name Symbolic name or list of symbolic names * @throws {Error} Name argument must be a string or array */ unregister(name: string | string[]): void; /** * Get data for a given symbolic name. * * @param name Symbolic name * @return Data associated with symbolic name */ lookup(name: string): unknown | undefined; // #region EventEmitter overloads on( event: K, method: EventHandler void>, args?: A, context?: C, ): this; on( event: K extends keyof RegistryEventMap ? never : K, method: EventHandler, args?: any[], context?: C, ): this; once( event: K, listener: (this: null, ...args: RegistryEventMap[K]) => void, ): this; once( event: K extends keyof RegistryEventMap ? never : K, listener: (this: null, ...args: any[]) => void, ): this; off( event: K, method?: EventHandler void>, context?: C, ): this; off( event: K extends keyof RegistryEventMap ? never : K, method?: EventHandler, context?: C, ): this; emit(event: K, ...args: RegistryEventMap[K]): boolean; emit(event: K extends keyof RegistryEventMap ? never : K, ...args: any[]): boolean; emitThrow(event: K, ...args: RegistryEventMap[K]): boolean; emitThrow(event: K extends keyof RegistryEventMap ? never : K, ...args: any[]): boolean; // eslint-disable-next-line @definitelytyped/no-unnecessary-generics connect>, C>( context: C, methods: EventConnectionMap, ): this; // eslint-disable-next-line @definitelytyped/no-unnecessary-generics disconnect>, C>( context: C, methods?: EventConnectionMap, ): this; // #endregion } interface RegistryConstructor { new(): Registry; prototype: Registry; static: {}; } const Registry: RegistryConstructor; }