context-hook
Version:
Simple util that resolves common cases with react Context API.
16 lines (15 loc) • 866 B
TypeScript
import React from "react";
import { PascalCase } from "./to-pascal-case";
declare type HookFunc<P extends object | void, R extends object> = void extends P ? () => R : (payload: P) => R;
declare type Props<P extends object | void> = void extends P ? {
children?: React.ReactNode;
} : P & {
children?: React.ReactNode;
};
declare type HookName<Name extends string> = `use${PascalCase<Name>}`;
declare type ProviderName<Name extends string> = `${PascalCase<Name>}Provider`;
declare type Result<P extends object | void, R extends object, Name extends string> = {
[K in HookName<Name> | ProviderName<Name>]: K extends HookName<Name> ? () => R : (props: Props<P>) => JSX.Element;
};
export declare const createContextHook: <P extends void | object, R extends object, Name extends string>(name: Name, useHook: HookFunc<P, R>) => Result<P, R, Name>;
export {};