/// <reference types="react" />
import * as React from "react";
import { ReactElement } from "react";
import { GlobalContext } from "../react/global-context";
export interface StatefulBaseComponentConstructor<P, S extends object> extends React.ComponentClass<P>, React.ComponentLifecycle<P, S> {
    new (props?: P, context?: any): StatefulBaseComponent<P, S>;
}
export declare abstract class StatefulBaseComponent<P, S extends object> extends React.Component<P, S> implements GlobalContext {
    readonly context: any;
    private static _bindingMethods;
    abstract state: S;
    constructor(props: P, context: any);
    afterConstruct<T>(props: P, context: T): void;
    abstract render(): ReactElement<any> | null;
}
export interface BaseComponentConstructor<P> extends React.ComponentClass<P>, React.ComponentLifecycle<P, {}> {
    new (props?: P, context?: any): BaseComponent<P>;
}
export interface ReactComponentConstructor<P> extends React.ComponentClass<P>, React.ComponentLifecycle<P, any> {
    new (props?: P, context?: any): React.Component<P, any>;
}
/** Redux base component */
export declare abstract class BaseComponent<P> extends StatefulBaseComponent<P, {}> implements GlobalContext {
    state: {};
}
export declare function BindThis<T>(target: StatefulBaseComponent<any, any>, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor<T>): TypedPropertyDescriptor<T>;
