// Type definitions for react-copy-write 0.7 // Project: https://github.com/aweary/react-copy-write // Definitions by: Sam A. Horvath-Hunt // Dave Jeffery // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped // TypeScript Version: 2.8 import { Component } from 'react'; // It'd be nice if this could somehow be improved! Perhaps we need variadic // kinds plus infer keyword? Alternatively unions may solve our issue if we had // the ability to restrict type widening. type AnyDeepMemberOfState = any; type MutateFn = (draft: T, state: Readonly) => void; type Mutator = (mutator: MutateFn) => void; type SelectorFn = (state: T) => AnyDeepMemberOfState; type RenderFn = (...state: Array>>>) => JSX.Element | JSX.Element[] | null; interface ConsumerPropsBase { select?: Array>; } interface ConsumerPropsExplicitRender extends ConsumerPropsBase { render?: RenderFn; } interface ConsumerPropsImplicitRender extends ConsumerPropsBase { children?: RenderFn; } type ConsumerProps = ConsumerPropsExplicitRender | ConsumerPropsImplicitRender; declare class Consumer extends Component> {} interface ProviderProps { children: JSX.Element | JSX.Element[]; initialState?: Partial; } declare class Provider extends Component> {} declare function create(state: T): { Provider: new() => Provider, Consumer: new() => Consumer, createSelector: SelectorFn, mutate: Mutator, }; export default create;