declare const assignmentCompatibilityHack ; export type MatchingKeys < TRecord , TMatch , K extends keyof TRecord = keyof TRecord > = K extends ( TRecord [ K ] extends TMatch ? K : never ) ? K : never ; export type VoidKeys < Record > = MatchingKeys < Record , void > ; export interface TypeRecord < T , U , V > { ' _emitterType' ? : T ; ' _eventsType' ? : U ; ' _emitType' ? : V ; } export type ReturnTypeOfMethod < T > = T extends ( ... args : any [ ] ) => any ? ReturnType < T > : void ; export type ReturnTypeOfMethodIfExists < T , S extends string > = S extends keyof T ? ReturnTypeOfMethod < T [ S ] > : void ; export type InnerEEMethodReturnType < T , TValue , FValue > = T extends ( ... args : any [ ] ) => any ? ReturnType < T > extends void | undefined ? FValue : TValue : FValue ; export type EEMethodReturnType < T , S extends string , TValue , FValue = void > = S extends keyof T ? InnerEEMethodReturnType < T [ S ] , TValue , FValue > : FValue ; export type ListenerType < T > = [ T ] extends [ ( ... args : infer U ) => any ] ? U : [ T ] extends [ void ] ? [ ] : [ T ] ; export type OverriddenMethods < TEmitter , TEventRecord , TEmitRecord = TEventRecord > = { on < P extends keyof TEventRecord , T > ( this , event , listener ) : EEMethodReturnType < TEmitter , 'on' , T > ; on ( event , listener ) : void ; addListener < P extends keyof TEventRecord , T > ( this , event , listener ) : EEMethodReturnType < TEmitter , 'addListener' , T > ; addListener ( event , listener ) : void ; addEventListener < P extends keyof TEventRecord , T > ( this , event , listener ) : EEMethodReturnType < TEmitter , 'addEventListener' , T > ; addEventListener ( event , listener ) : void ; removeListener < P extends keyof TEventRecord , T > ( this , event , listener ) : EEMethodReturnType < TEmitter , 'removeListener' , T > ; removeListener ( event , listener ) : void ; removeEventListener < P extends keyof TEventRecord , T > ( this , event , listener ) : EEMethodReturnType < TEmitter , 'removeEventListener' , T > ; removeEventListener ( event , listener ) : void ; once < P extends keyof TEventRecord , T > ( this , event , listener ) : EEMethodReturnType < TEmitter , 'once' , T > ; once ( event , listener ) : void ; emit < P extends keyof TEmitRecord , T > ( this , event , ... args ) : EEMethodReturnType < TEmitter , 'emit' , T > ; emit ( event , ... args ) : void ; } ; export type OverriddenKeys = keyof OverriddenMethods < any , any , any > ; export type StrictEventEmitter < TEmitterType , TEventRecord , TEmitRecord = TEventRecord , UnneededMethods extends Exclude < OverriddenKeys , keyof TEmitterType > = Exclude < OverriddenKeys , keyof TEmitterType > , NeededMethods extends Exclude < OverriddenKeys , UnneededMethods > = Exclude < OverriddenKeys , UnneededMethods > > = TypeRecord < TEmitterType , TEventRecord , TEmitRecord > & Pick < TEmitterType , Exclude < keyof TEmitterType , OverriddenKeys > > & Pick < OverriddenMethods < TEmitterType , TEventRecord , TEmitRecord > , NeededMethods > ; export default StrictEventEmitter ; export type NoUndefined < T > = T extends undefined ? never : T ; export type StrictBroadcast < TEmitter extends TypeRecord < any , any , any > , TEmitRecord extends NoUndefined < TEmitter [ ' _emitType' ] > = NoUndefined < TEmitter [ ' _emitType' ] > , VK extends VoidKeys < TEmitRecord > = VoidKeys < TEmitRecord > , NVK extends Exclude < keyof TEmitRecord , VK > = Exclude < keyof TEmitRecord , VK > > = { < E extends NVK > ( event , request ) : any ; < E extends VK > ( event ) : any ; } ; export type EventNames < TEmitter extends TypeRecord < any , any , any > , TEventRecord extends NoUndefined < TEmitter [ ' _eventsType' ] > = NoUndefined < TEmitter [ ' _eventsType' ] > , TEmitRecord extends NoUndefined < TEmitter [ ' _emitType' ] > = NoUndefined < TEmitter [ ' _emitType' ] > > = keyof TEmitRecord | keyof TEventRecord ; export type OnEventNames < TEmitter extends TypeRecord < any , any , any > , TEventRecord extends NoUndefined < TEmitter [ ' _eventsType' ] > = NoUndefined < TEmitter [ ' _eventsType' ] > , TEmitRecord extends NoUndefined < TEmitter [ ' _emitType' ] > = NoUndefined < TEmitter [ ' _emitType' ] > > = keyof TEventRecord ; export type EmitEventNames < TEmitter extends TypeRecord < any , any , any > , TEventRecord extends NoUndefined < TEmitter [ ' _eventsType' ] > = NoUndefined < TEmitter [ ' _eventsType' ] > , TEmitRecord extends NoUndefined < TEmitter [ ' _emitType' ] > = NoUndefined < TEmitter [ ' _emitType' ] > > = keyof TEmitRecord ;