@@ -2,11 +2,6 @@ import React, { forwardRef } from 'react';
22import { createEffectMethods } from '../create-effects' ;
33import { StoreApi } from '../types' ;
44
5- // type StoreProviderProps<TState> = {
6- // initialState?: Partial<TState>;
7- // children: React.ReactNode;
8- // };
9-
105type AnyFn = ( ...args :any [ ] ) => any ;
116
127export function createStoreContext < TCreator extends StoreApi < any , any > | AnyFn > (
@@ -20,36 +15,30 @@ export function createStoreContext<TCreator extends StoreApi<any, any> | AnyFn>(
2015
2116type StoreParams = TCreator extends AnyFn
2217?Parameters < TCreator > [ 0 ]
23- :Partial <
24- StoreInstance extends StoreApi < inferTState , any > ?TState :never
25- > ;
26-
27- type ProviderProps = TCreator extends AnyFn
28- ?StoreParams
29- :TCreator extends StoreApi < inferTState , any >
30- ?{
31- initialState ?:Partial < TState > ;
32- }
18+ :TCreator extends StoreApi < inferTState , inferTExtensions >
19+ ?{ initialState ?:Partial < TState > }
3320:never ;
3421
3522const createInstance = ( props :StoreParams ) :StoreInstance => {
3623if ( typeof creator === 'function' ) {
37- return creator ( props as any ) ;
24+ return creator ( props as StoreParams ) ;
3825}
3926
40- return ( creator as StoreInstance ) . create ( props . initialState as any ) ;
27+ return ( creator as StoreInstance ) . create (
28+ ( props as StoreParams ) . initialState
29+ ) ;
4130} ;
4231
4332const Context = React . createContext < StoreInstance | null > ( null ) ;
4433
4534const Provider = (
4635props :{
4736children :React . ReactNode ;
48- } & ProviderProps
37+ } & StoreParams
4938) => {
5039const { children, ...restProps } = props ;
5140const storeInstance = React . useRef < StoreInstance > (
52- createInstance ( restProps as any )
41+ createInstance ( restProps as StoreParams )
5342) ;
5443
5544React . useEffect ( ( ) => {
@@ -66,7 +55,7 @@ export function createStoreContext<TCreator extends StoreApi<any, any> | AnyFn>(
6655} , [ ] ) ;
6756
6857return (
69- < Context . Provider value = { storeInstance . current as any } >
58+ < Context . Provider value = { storeInstance . current as StoreInstance } >
7059{ children }
7160</ Context . Provider >
7261) ;
@@ -81,15 +70,13 @@ export function createStoreContext<TCreator extends StoreApi<any, any> | AnyFn>(
8170} ;
8271
8372const withProvider = < TProps extends object > ( Component :React . FC < TProps > ) => {
84- const WrappedComponent = forwardRef (
85- ( props :TProps & ProviderProps , ref ) => {
86- return (
87- < Provider { ...props } >
88- < Component { ...props } ref = { ref } />
89- </ Provider >
90- ) ;
91- }
92- ) ;
73+ const WrappedComponent = forwardRef ( ( props :TProps & StoreParams , ref ) => {
74+ return (
75+ < Provider { ...props } >
76+ < Component { ...props } ref = { ref } />
77+ </ Provider >
78+ ) ;
79+ } ) ;
9380
9481WrappedComponent . displayName = `withProvider(${
9582Component . displayName || Component . name || 'Component'