/** * Turns a React component or stateless render function into a reactive component. */ import * as React from "react" export type IReactComponent

= | React.StatelessComponent

| React.ComponentClass

| React.ClassicComponentClass

/** * Observer */ // Deprecated: observer with with stores (as decorator) export function observer(stores: string[]): (clazz: T) => void // Deprecated: observer with with stores export function observer(stores: string[], clazz: T): T export function observer(target: T): T /** * Inject */ export type IValueMap = { [key: string]: any } export type IStoresToProps< S extends IValueMap = {}, P extends IValueMap = {}, I extends IValueMap = {}, C extends IValueMap = {} > = (stores: S, nextProps: P, context: C) => I export type IWrappedComponent

= { wrappedComponent: IReactComponent

wrappedInstance: React.ReactInstance | undefined } // Ideally we would want to return React.ComponentClass>, // but TS doesn't allow such things in decorators, like we do in the non-decorator version // See also #256 export function inject( ...stores: string[] ): >( target: T ) => T & (T extends IReactComponent ? IWrappedComponent

: never) export function inject( fn: IStoresToProps ): (target: T) => T & IWrappedComponent

// Ideal implementation: // export function inject // ( // fn: IStoresToProps // ): //

(target: IReactComponent

) => IReactComponent> & IWrappedComponent>> // // Or even better: (but that would require type inference to work other way around) // export function inject // ( // fn: IStoresToProps // ): // (target: T) => IReactComponent

& IWrappedComponent /** * disposeOnUnmount */ type Disposer = () => void export function disposeOnUnmount(target: React.Component, propertyKey: string): void export function disposeOnUnmount( target: React.Component, fn: TF ): TF /** * Utilities */ export function onError(cb: (error: Error) => void): () => void export class Provider extends React.Component {} export class Observer extends React.Component< { children?: () => React.ReactNode render?: () => React.ReactNode }, {} > {} export function useStaticRendering(value: boolean): void /** * Enable dev tool support, makes sure that renderReport emits events. */ export function trackComponents(): void export const renderReporter: RenderReporter export interface RenderReporter { on(handler: (data: IRenderEvent) => void): void } export interface IRenderEvent { event: "render" | "destroy" renderTime?: number totalTime?: number component: React.ReactElement // Component instance node: any // DOMNode } /** * WeakMap DOMNode -> Component instance * @deprecated */ export const componentByNodeRegistery: any /** * WeakMap DOMNode -> Component instance */ export const componentByNodeRegistry: any /** * @deprecated, use PropTypes instead */ export const propTypes: { observableArray: React.Requireable observableArrayOf: (type: React.Validator) => React.Requireable observableMap: React.Requireable observableObject: React.Requireable arrayOrObservableArray: React.Requireable arrayOrObservableArrayOf: (type: React.Validator) => React.Requireable objectOrObservableObject: React.Requireable } export const PropTypes: { observableArray: React.Requireable observableArrayOf: (type: React.Validator) => React.Requireable observableMap: React.Requireable observableObject: React.Requireable arrayOrObservableArray: React.Requireable arrayOrObservableArrayOf: (type: React.Validator) => React.Requireable objectOrObservableObject: React.Requireable }