export interface STCustomEventInit<T> extends CustomEventInit<T> {
    detail: T;
}
export interface STCustomEvent<EventMap extends {}, EventName extends keyof EventMap = keyof EventMap> extends CustomEvent<EventMap[EventName]> {
    new <T extends keyof EventMap>(typeArg: T, ...ConditionalOptionalArgs: EventMap[T] extends undefined ? [STCustomEventInit<EventMap[T]>?] : [STCustomEventInit<EventMap[T]>]): STCustomEvent<EventMap, T>;
}
export interface STEventListener<EventMap extends {}, EventName extends keyof EventMap = keyof EventMap> {
    (evt: STCustomEvent<EventMap, EventName>): void;
}
export interface STEventListenerObject<EventMap extends {}, EventName extends keyof EventMap = keyof EventMap> {
    handleEvent(evt: STCustomEvent<EventMap, EventName>): void;
}
export declare type STEventListenerOrEventListenerObject<EventMap extends {}, EventName extends keyof EventMap = keyof EventMap> = STEventListener<EventMap, EventName> | STEventListenerObject<EventMap, EventName>;
export interface STEventTarget<EventMap extends {}> {
    new (): STEventTarget<EventMap>;
    addEventListener<T extends keyof EventMap>(type: T, listener: STEventListenerOrEventListenerObject<EventMap, T> | null, options?: boolean | AddEventListenerOptions): void;
    dispatchEvent<CustomEvent extends STCustomEvent<EventMap, keyof EventMap>>(event: CustomEvent): boolean;
    removeEventListener<T extends keyof EventMap>(type: T, callback: STEventListenerOrEventListenerObject<EventMap, T> | null, options?: EventListenerOptions | boolean): void;
}
export declare function createSTEventTarget<EventMap extends {}>(): readonly [STCustomEvent<EventMap, keyof EventMap>, STEventTarget<EventMap>];
//# sourceMappingURL=index.d.ts.map