wouter-preact
Version:
Minimalist-friendly ~1.5KB router for Preact
41 lines (31 loc) • 1.05 kB
TypeScript
/*
* Foundation: useLocation and paths
*/
export type Path = string;
export type PathPattern = string | RegExp;
export type SearchString = string;
export type HrefsFormatter = (href: string, router?: any) => string;
// the base useLocation hook type. Any custom hook (including the
// default one) should inherit from it.
export type BaseLocationHook = {
(...args: any[]): [Path, (path: Path, ...args: any[]) => any];
searchHook?: BaseSearchHook;
hrefs?: HrefsFormatter;
};
export type BaseSearchHook = (...args: any[]) => SearchString;
/*
* Utility types that operate on hook
*/
// Returns the type of the location tuple of the given hook.
export type HookReturnValue<H extends BaseLocationHook> = ReturnType<H>;
// Returns the type of the navigation options that hook's push function accepts.
export type HookNavigationOptions<H extends BaseLocationHook> =
HookReturnValue<H>[1] extends (
path: Path,
options: infer R,
...rest: any[]
) => any
? R extends { [k: string]: any }
? R
: {}
: {};