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
TypeScript
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 {};