ayanami
Version:
A better way to react with state
13 lines (12 loc) • 1.06 kB
TypeScript
import * as React from 'react';
import { Ayanami, ActionMethodOfAyanami, ConstructorOf, Omit } from './core';
declare type ConnectedComponent<P, S, A> = React.FunctionComponent<Omit<P, keyof S | keyof A>>;
declare type ConnectComponent<S, A> = <P>(Component: React.ComponentType<P>) => ConnectedComponent<P, S, A>;
export interface ComponentConnectedWithAyanami<M extends Ayanami<S>, S> {
(): ConnectComponent<Record<string, unknown>, Record<string, unknown>>;
<MS>(mapStateToProps: (state: S) => MS): ConnectComponent<MS, Record<string, unknown>>;
<MS, MA>(mapStateToProps: (state: S) => MS, mapActionsToProps: (actions: ActionMethodOfAyanami<M, S>) => MA): ConnectComponent<MS, MA>;
<MA>(mapStateToProps: null, mapActionsToProps: (actions: ActionMethodOfAyanami<M, S>) => MA): ConnectComponent<Record<string, unknown>, MA>;
}
export declare function connectAyanami<M extends Ayanami<S>, S>(AyanamiClass: ConstructorOf<M>): M extends Ayanami<infer SS> ? ComponentConnectedWithAyanami<M, SS> : ComponentConnectedWithAyanami<M, S>;
export {};