UNPKG

react-use-anywhere

Version:

Use React hooks anywhere in your codebase - in services, utilities, and business logic. Router-agnostic, hook-agnostic, and works with any React hooks (auth, navigation, state, custom hooks, etc.).

49 lines (47 loc) 2.16 kB
import { HookService, ReactHook } from '../types'; /** * Hook to connect a service to a hook value from the context * Use this in React components to make hook values available in services */ export declare function useHookService<T = unknown>(service: HookService<T>, hookName: string): void; /** * 🆕 TYPE-SAFE VERSION: Connect service with compile-time type checking */ export declare function useTypedHookService<THooks extends Record<string, ReactHook<unknown>>, K extends keyof THooks>(service: HookService<ExtractHookType<THooks[K]>>, hookName: K): void; /** * 🆕 STRICT TYPE-SAFE VERSION: Enforces valid hook names at compile time * This will show TypeScript errors for invalid hook names * * Usage: * ```typescript * // Define your hook types * type AppHooks = { * navigate: () => NavigateFunction; * auth: () => AuthState; * }; * * // Use with type checking * useStrictHookService<AppHooks>(navService, 'navigate'); // ✅ Valid * useStrictHookService<AppHooks>(navService, 'invalid'); // ❌ TypeScript Error * ``` */ export declare function useStrictHookService<THooks extends Record<string, ReactHook<unknown>>>(service: HookService<ExtractHookType<THooks[keyof THooks]>>, hookName: keyof THooks & string): void; /** * 🆕 TYPE-SAFE HOOK ACCESS: Get hook value with compile-time type checking */ export declare function useTypedHook<THooks extends Record<string, ReactHook<unknown>>, K extends keyof THooks>(hookName: K): ExtractHookType<THooks[K]>; /** * 🆕 STRICT TYPED HOOK ACCESS: Enforces valid hook names at compile time */ export declare function useStrictHook<THooks extends Record<string, ReactHook<unknown>>>(hookName: keyof THooks & string): ExtractHookType<THooks[typeof hookName]>; /** * Hook to get a hook value directly from the context * Use this in React components when you want to use hook values directly */ export declare function useHook<T = unknown>(hookName: string): T | undefined; /** * Hook to get all hook values from the context */ export declare function useAllHooks(): Record<string, unknown>; type ExtractHookType<T> = T extends ReactHook<infer R> ? R : never; export {};