@@ -3,7 +3,7 @@ import { React } from '../utils/react'
33
44import type { ReactReduxContextValue } from '../components/Context'
55import { ReactReduxContext } from '../components/Context'
6- import type { EqualityFn , NoInfer } from '../types'
6+ import type { EqualityFn , NoInfer , TypedUseSelectorHook } from '../types'
77import type { uSESWS } from '../utils/useSyncExternalStore'
88import { notInitialized } from '../utils/useSyncExternalStore'
99import {
@@ -75,7 +75,21 @@ export interface UseSelector {
7575 selector : ( state : TState ) => Selected ,
7676 options ?: UseSelectorOptions < Selected >
7777 ) : Selected
78+ withTypes : < TState > ( ) => TypedUseSelectorHook < TState >
7879}
80+ // export interface UseSelector<StateType = unknown> {
81+ // <TState extends StateType = StateType, Selected = unknown>(
82+ // selector: (state: TState) => Selected,
83+ // equalityFn?: EqualityFn<Selected>
84+ // ): Selected
85+ // <TState extends StateType = StateType, Selected = unknown>(
86+ // selector: (state: TState) => Selected,
87+ // options?: UseSelectorOptions<Selected>
88+ // ): Selected
89+ // withTypes: <
90+ // OverrideStateType extends StateType
91+ // >() => UseSelector<OverrideStateType>
92+ // }
7993
8094let useSyncExternalStoreWithSelector = notInitialized as uSESWS
8195export const initializeUseSelector = ( fn : uSESWS ) => {
@@ -101,12 +115,12 @@ export function createSelectorHook(
101115 ? useDefaultReduxContext
102116 : createReduxContextHook ( context )
103117
104- return function useSelector < TState , Selected extends unknown > (
118+ const useSelector = < TState , Selected extends unknown > (
105119 selector : ( state : TState ) => Selected ,
106120 equalityFnOrOptions :
107121 | EqualityFn < NoInfer < Selected > >
108122 | UseSelectorOptions < NoInfer < Selected > > = { }
109- ) : Selected {
123+ ) : Selected => {
110124 const { equalityFn = refEquality , devModeChecks = { } } =
111125 typeof equalityFnOrOptions === 'function'
112126 ? { equalityFn : equalityFnOrOptions }
@@ -215,6 +229,12 @@ export function createSelectorHook(
215229
216230 return selectedState
217231 }
232+
233+ Object . assign ( useSelector , {
234+ withTypes : ( ) => useSelector ,
235+ } )
236+
237+ return useSelector as UseSelector
218238}
219239
220240/**
0 commit comments