@@ -5,9 +5,15 @@ import { useState } from 'react';
55
66import { useUnmount } from './useUnmount' ;
77
8- export function createGlobalState < S > ( ) : { ( ) : ImmerHook < S | undefined > ; set : Updater < S | undefined > } ;
9- export function createGlobalState < S > ( initialValue : S ) : { ( ) : ImmerHook < S > ; set : Updater < S > } ;
10- export function createGlobalState < S > ( initialValue ?: S ) : { ( ) : ImmerHook < S | undefined > ; set : Updater < S | undefined > } {
8+ interface GlobalStateHook < S > {
9+ ( ) : ImmerHook < S > ;
10+ readonly state : S ;
11+ setState : Updater < S > ;
12+ }
13+
14+ export function createGlobalState < S > ( ) : GlobalStateHook < S | undefined > ;
15+ export function createGlobalState < S > ( initialValue : S ) : GlobalStateHook < S > ;
16+ export function createGlobalState < S > ( initialValue ?: S ) : GlobalStateHook < S | undefined > {
1117 const store = {
1218 state : freeze ( typeof initialValue === 'function' ? initialValue ( ) : initialValue , true ) ,
1319 setState ( updater : any ) {
@@ -24,7 +30,7 @@ export function createGlobalState<S>(initialValue?: S): { (): ImmerHook<S | unde
2430 updates : new Set < ( ...args : any [ ] ) => any > ( ) ,
2531 } ;
2632
27- return Object . assign < any , any > (
33+ return new Proxy (
2834 ( ) => {
2935 const [ state , setState ] = useState ( store . state ) ;
3036
@@ -39,7 +45,15 @@ export function createGlobalState<S>(initialValue?: S): { (): ImmerHook<S | unde
3945 return [ state , store . setState ] ;
4046 } ,
4147 {
42- set : store . setState ,
48+ get ( target , prop , receiver ) {
49+ if ( prop === 'state' ) {
50+ return store . state ;
51+ }
52+ if ( prop === 'setState' ) {
53+ return store . setState ;
54+ }
55+ return Reflect . get ( target , prop , receiver ) ;
56+ } ,
4357 }
44- ) ;
58+ ) as any ;
4559}
0 commit comments