import { Unsubscribe } from "../types";
import Grid from ".";
interface AnyActions {
    [key: string]: (grid: Grid, cb: Function) => () => void;
}
export declare type HandlersOfActions<A extends AnyActions> = {
    [K in keyof A]: Parameters<A[K]>[1];
};
export declare type AnyEvents<T> = {
    [P in keyof T]: (...args: any) => boolean | void;
};
export declare type Events<T> = {
    [P in keyof T]: T[P][];
};
export declare type Handlers<A extends AnyActions, E extends AnyEvents<E>> = HandlersOfActions<A> & E;
export declare class Observer<E extends AnyEvents<E>, A extends AnyActions> {
    protected grid: Grid;
    protected actions: A;
    protected events: Events<E>;
    constructor(grid: Grid, events: Events<E>, actions: A);
    on<K extends keyof A | keyof E, H extends Handlers<A, E>>(e: K, h: H[K]): Unsubscribe;
    trigger<K extends keyof E>(e: K, ...args: Parameters<E[K]>): boolean;
}
export default Observer;
