// Type definitions for Recompose 0.24 // Project: https://github.com/acdlite/recompose // Definitions by: Iskander Sierra // Samuel DeSota // Curtis Layne // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped // TypeScript Version: 2.4 /// declare module 'recompose' { import * as React from 'react'; import { ComponentType as Component, ComponentClass, StatelessComponent, ValidationMap } from 'react'; type mapper = (input: TInner) => TOutter; type predicate = mapper; type predicateDiff = (current: T, next: T) => boolean // Diff / Omit taken from https://github.com/Microsoft/TypeScript/issues/12215#issuecomment-311923766 type Diff = ({ [P in T]: P } & { [P in U]: never } & { [x: string]: never })[T]; type Omit = Pick>; interface Observer{ next(props: T): void; complete(): void; } interface Subscription{ unsubscribe(): void } interface Subscribable { subscribe(observer: Observer): Subscription; } interface ComponentEnhancer { (component: Component): ComponentClass; } // Injects props and removes them from the prop requirements. // Will not pass through the injected props if they are passed in during // render. Also adds new prop requirements from TNeedsProps. export interface InferableComponentEnhancerWithProps {

( component: Component

): React.ComponentType & TNeedsProps> } // Injects props and removes them from the prop requirements. // Will not pass through the injected props if they are passed in during // render. export type InferableComponentEnhancer = InferableComponentEnhancerWithProps // Injects default props and makes them optional. Will still pass through // the injected props if they are passed in during render. export type DefaultingInferableComponentEnhancer = InferableComponentEnhancerWithProps> // Higher-order components: https://github.com/acdlite/recompose/blob/master/docs/API.md#higher-order-components // mapProps: https://github.com/acdlite/recompose/blob/master/docs/API.md#mapprops export function mapProps( propsMapper: mapper, ): InferableComponentEnhancerWithProps; // withProps: https://github.com/acdlite/recompose/blob/master/docs/API.md#withprops export function withProps( createProps: TInner | mapper ): InferableComponentEnhancerWithProps; // withPropsOnChange: https://github.com/acdlite/recompose/blob/master/docs/API.md#withpropsonchange export function withPropsOnChange( shouldMapOrKeys: string[] | predicateDiff, createProps: mapper ): InferableComponentEnhancerWithProps; // withHandlers: https://github.com/acdlite/recompose/blob/master/docs/API.md#withhandlers type EventHandler = Function; type HandleCreators = { [handlerName in keyof THandlers]: mapper; }; type HandleCreatorsFactory = (initialProps: TOutter) => HandleCreators; export function withHandlers( handlerCreators: HandleCreators | HandleCreatorsFactory ): InferableComponentEnhancerWithProps; // defaultProps: https://github.com/acdlite/recompose/blob/master/docs/API.md#defaultprops export function defaultProps( props: T ): DefaultingInferableComponentEnhancer; // renameProp: https://github.com/acdlite/recompose/blob/master/docs/API.md#renameProp export function renameProp( outterName: string, innerName: string ): ComponentEnhancer; // renameProps: https://github.com/acdlite/recompose/blob/master/docs/API.md#renameProps type NameMap = { [outterName: string]: string; }; export function renameProps( nameMap: NameMap ): ComponentEnhancer; // flattenProp: https://github.com/acdlite/recompose/blob/master/docs/API.md#flattenProp export function flattenProp( propName: string ): ComponentEnhancer; // withState: https://github.com/acdlite/recompose/blob/master/docs/API.md#withState type stateProps< TState, TStateName extends string, TStateUpdaterName extends string > = ( {[stateName in TStateName]: TState} & {[stateUpdateName in TStateUpdaterName]: (state: TState) => TState} ) export function withState< TOutter, TState, TStateName extends string, TStateUpdaterName extends string >( stateName: TStateName, stateUpdaterName: TStateUpdaterName, initialState: TState | mapper ): InferableComponentEnhancerWithProps< stateProps, TOutter >; // withStateHandlers: https://github.com/acdlite/recompose/blob/master/docs/API.md#withstatehandlers type StateHandler = (...payload: any[]) => TState | undefined; type StateHandlerMap = { [updaterName: string]: StateHandler; }; type StateUpdaters = { [updaterName in keyof TUpdaters]: (state: TState, props: TOutter) => StateHandler; }; export function withStateHandlers, TOutter = {}>( createProps: TState | mapper, stateUpdaters: StateUpdaters, ): InferableComponentEnhancerWithProps; // withReducer: https://github.com/acdlite/recompose/blob/master/docs/API.md#withReducer type reducer = (s: TState, a: TAction) => TState; type reducerProps< TState, TAction, TStateName extends string, TDispatchName extends string > = ( {[stateName in TStateName]: TState} & {[dispatchName in TDispatchName]: (a: TAction) => void} ) export function withReducer< TOutter, TState, TAction, TStateName extends string, TDispatchName extends string >( stateName: TStateName, dispatchName: TDispatchName, reducer: reducer, initialState: TState | mapper ): InferableComponentEnhancerWithProps< reducerProps, TOutter >; // branch: https://github.com/acdlite/recompose/blob/master/docs/API.md#branch export function branch( test: predicate, trueEnhancer: ComponentEnhancer | InferableComponentEnhancer<{}>, falseEnhancer?: ComponentEnhancer | InferableComponentEnhancer<{}> ): ComponentEnhancer; // renderComponent: https://github.com/acdlite/recompose/blob/master/docs/API.md#renderComponent export function renderComponent( component: string | Component ): ComponentEnhancer; // renderNothing: https://github.com/acdlite/recompose/blob/master/docs/API.md#renderNothing export const renderNothing: InferableComponentEnhancer<{}>; // shouldUpdate: https://github.com/acdlite/recompose/blob/master/docs/API.md#shouldUpdate export function shouldUpdate( test: predicateDiff ): InferableComponentEnhancer<{}>; // pure: https://github.com/acdlite/recompose/blob/master/docs/API.md#pure export function pure (component: Component): Component; // onlyUpdateForKeys: https://github.com/acdlite/recompose/blob/master/docs/API.md#onlyUpdateForKeys export function onlyUpdateForKeys( propKeys: Array ) : InferableComponentEnhancer<{}>; export function onlyUpdateForKeys( propKeys: Array ) : InferableComponentEnhancer<{}>; // onlyUpdateForPropTypes: https://github.com/acdlite/recompose/blob/master/docs/API.md#onlyUpdateForPropTypes export const onlyUpdateForPropTypes: InferableComponentEnhancer<{}>; // withContext: https://github.com/acdlite/recompose/blob/master/docs/API.md#withContext export function withContext( childContextTypes: ValidationMap, getChildContext: mapper ) : InferableComponentEnhancer<{}>; // getContext: https://github.com/acdlite/recompose/blob/master/docs/API.md#getContext export function getContext( contextTypes: ValidationMap ) : InferableComponentEnhancer; interface _ReactLifeCycleFunctionsThisArguments { props: TProps, state: TState, setState(f: (prevState: TState, props: TProps) => Pick, callback?: () => any): void; setState(state: Pick, callback?: () => any): void; forceUpdate(callBack?: () => any): void; context: any; refs: { [key: string]: React.ReactInstance }; } type ReactLifeCycleFunctionsThisArguments = _ReactLifeCycleFunctionsThisArguments & TInstance // lifecycle: https://github.com/acdlite/recompose/blob/master/docs/API.md#lifecycle interface ReactLifeCycleFunctions { componentWillMount?: (this: ReactLifeCycleFunctionsThisArguments) => void; componentDidMount?: (this: ReactLifeCycleFunctionsThisArguments) => void; componentWillReceiveProps?: (this: ReactLifeCycleFunctionsThisArguments, nextProps: TProps) => void; shouldComponentUpdate?: (this: ReactLifeCycleFunctionsThisArguments, nextProps: TProps, nextState: TState) => boolean; componentWillUpdate?: (this: ReactLifeCycleFunctionsThisArguments, nextProps: TProps, nextState: TState) => void; componentDidUpdate?: (this: ReactLifeCycleFunctionsThisArguments, prevProps: TProps, prevState: TState) => void; componentWillUnmount?: (this: ReactLifeCycleFunctionsThisArguments) => void; } export function lifecycle( spec: ReactLifeCycleFunctions & TInstance ): InferableComponentEnhancer<{}>; // toClass: https://github.com/acdlite/recompose/blob/master/docs/API.md#toClass export const toClass: InferableComponentEnhancer<{}>; // Static property helpers: https://github.com/acdlite/recompose/blob/master/docs/API.md#static-property-helpers // setStatic: https://github.com/acdlite/recompose/blob/master/docs/API.md#setStatic export function setStatic( key: string, value: any ): ComponentEnhancer; // setPropTypes: https://github.com/acdlite/recompose/blob/master/docs/API.md#setPropTypes export function setPropTypes( propTypes: ValidationMap ): ComponentEnhancer; // setDisplayName: https://github.com/acdlite/recompose/blob/master/docs/API.md#setDisplayName export function setDisplayName( displayName: string ): ComponentEnhancer; // Utilities: https://github.com/acdlite/recompose/blob/master/docs/API.md#utilities // compose: https://github.com/acdlite/recompose/blob/master/docs/API.md#compose export function compose( ...functions: Function[] ): ComponentEnhancer; // export function compose( // ...functions: Array // ): ComponentEnhancer; // export function compose( // ...functions: Array // ): ComponentEnhancer; // getDisplayName: https://github.com/acdlite/recompose/blob/master/docs/API.md#getDisplayName export function getDisplayName( component: Component ): string; // wrapDisplayName: https://github.com/acdlite/recompose/blob/master/docs/API.md#wrapDisplayName export function wrapDisplayName( component: Component, wrapperName: string ): string; // shallowEqual: https://github.com/acdlite/recompose/blob/master/docs/API.md#shallowEqual export function shallowEqual( a: Object, b: Object ): boolean; // isClassComponent: https://github.com/acdlite/recompose/blob/master/docs/API.md#isClassComponent export function isClassComponent( value: any ): boolean; // createEagerElement: https://github.com/acdlite/recompose/blob/master/docs/API.md#createEagerElement export function createEagerElement( type: Component | string, props?: Object, children?: React.ReactNode ): React.ReactElement; // createEagerFactory: https://github.com/acdlite/recompose/blob/master/docs/API.md#createEagerFactory type componentFactory = (props?: Object, children?: React.ReactNode) => React.ReactElement; export function createEagerFactory( type: Component | string ): componentFactory; // createSink: https://github.com/acdlite/recompose/blob/master/docs/API.md#createSink export function createSink( callback: (props: Object) => void ): React.ComponentClass; // ??? // componentFromProp: https://github.com/acdlite/recompose/blob/master/docs/API.md#componentFromProp export function componentFromProp( propName: string ): StatelessComponent; // nest: https://github.com/acdlite/recompose/blob/master/docs/API.md#nest export function nest( ...Components: (string | Component)[] ): React.ComponentClass; // ??? // hoistStatics: https://github.com/acdlite/recompose/blob/master/docs/API.md#hoistStatics export function hoistStatics( hoc: InferableComponentEnhancer ): InferableComponentEnhancer; // Observable utilities: https://github.com/acdlite/recompose/blob/master/docs/API.md#observable-utilities // componentFromStream: https://github.com/acdlite/recompose/blob/master/docs/API.md#componentFromStream export function componentFromStream( propsToReactNode: mapper, Subscribable> ): Component; // ??? // componentFromStreamWithConfig: https://github.com/acdlite/recompose/blob/master/docs/API.md#componentfromstreamwithconfig export function componentFromStreamWithConfig(config: ObservableConfig): ( propsToReactNode: mapper, Subscribable> ) => Component // mapPropsStream: https://github.com/acdlite/recompose/blob/master/docs/API.md#mapPropsStream export function mapPropsStream( transform: mapper, Subscribable> ): ComponentEnhancer; // mapPropsStreamWithConfig: https://github.com/acdlite/recompose/blob/master/docs/API.md#mappropsstreamwithconfig export function mapPropsStreamWithConfig(config: ObservableConfig): ( transform: mapper, Subscribable> ) => ComponentEnhancer; // createEventHandler: https://github.com/acdlite/recompose/blob/master/docs/API.md#createEventHandler type EventHandlerOf> = { handler: (value: T) => void; stream: TSubs; }; export function createEventHandler>(): EventHandlerOf; // createEventHandlerWithConfig: https://github.com/acdlite/recompose/blob/master/docs/API.md#createEventHandlerWithConfig export function createEventHandlerWithConfig(config: ObservableConfig): >() => EventHandlerOf; // setObservableConfig: https://github.com/acdlite/recompose/blob/master/docs/API.md#setObservableConfig type ObservableConfig = { fromESObservable?: (observable: Subscribable) => any; toESObservable?: (stream: any) => Subscribable; }; export function setObservableConfig(config: ObservableConfig): void; } // https://github.com/acdlite/recompose/blob/master/docs/API.md#rxjs declare module 'recompose/rxjsObservableConfig' { import { ObservableConfig } from 'recompose'; const rxjsconfig: ObservableConfig; export default rxjsconfig; } // https://github.com/acdlite/recompose/blob/master/docs/API.md#rxjs-4-legacy declare module 'recompose/rxjs4ObservableConfig' { import { ObservableConfig } from 'recompose'; const rxjs4config: ObservableConfig; export default rxjs4config; } // https://github.com/acdlite/recompose/blob/master/docs/API.md#most declare module 'recompose/mostObservableConfig' { import { ObservableConfig } from 'recompose'; const mostConfig: ObservableConfig; export default mostConfig; } // https://github.com/acdlite/recompose/blob/master/docs/API.md#xstream declare module 'recompose/xstreamObservableConfig' { import { ObservableConfig } from 'recompose'; const xstreamConfig: ObservableConfig; export default xstreamConfig; } // https://github.com/acdlite/recompose/blob/master/docs/API.md#bacon declare module 'recompose/baconObservableConfig' { import { ObservableConfig } from 'recompose'; const baconConfig: ObservableConfig; export default baconConfig; } // https://github.com/acdlite/recompose/blob/master/docs/API.md#kefir declare module 'recompose/kefirObservableConfig' { import { ObservableConfig } from 'recompose'; const kefirConfig: ObservableConfig; export default kefirConfig; }