import { ChildRouteMap, RouteFn } from './routeFn'; import { RouteOptions } from './types'; type RoutesFn> = ( route: RouteFn ) => CRM; export type OptionsRouterFn = < RO extends RouteOptions, CRM extends ChildRouteMap >( options: Required, routes: RoutesFn ) => RouterType; export type RouterType< RO extends RouteOptions, CRM extends ChildRouteMap > = RO extends undefined ? { [K in keyof CRM]: CRM[K]; } : { [key: string]: never; } & { defaultOptions: RO; } & { [K in keyof CRM]: CRM[K]; }; export type RouterFn = >( routes: RoutesFn ) => RouterType;