type RegistryEntity = T; type RegistryEntities = Record; export class Registry { type?: Entities; private entities: any = {}; set(id: Id, entity: Entities[Id]) { this.entities[id] = entity; return this; } get(id: Id) { return this.entities[id]; } has(id: Id): boolean { const entity = this.entities[id]; return entity && entity.name !== 'EmptyPlaceholder'; } register(id: Id, entity: T): Registry { this.entities[id] = entity; return this; } } type ComponentType = T extends React.ComponentType ? React.ComponentType> : never; export interface ComponentsRegistryTemplate> { set(id: Id, entity: ComponentType): this; get(id: Id): ComponentType; has(id: Id): boolean; }