type BaseContext = { nonce?: string } export type RequestOptions = TRegister extends { server: { requestContext: infer TRequestContext } } ? TRequestContext extends undefined ? { context?: TRequestContext & BaseContext } : { context: TRequestContext & BaseContext } : { context?: BaseContext } // Utility type: true if T has any required keys, else false type HasRequired = keyof T extends never ? false : { [K in keyof T]-?: undefined extends T[K] ? never : K }[keyof T] extends never ? false : true export type RequestHandler = HasRequired> extends true ? ( request: Request, opts: RequestOptions, ) => Promise | Response : ( request: Request, opts?: RequestOptions, ) => Promise | Response