1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00

Another attempt to fix type errors

Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
Sebastian Malton 2022-06-23 16:57:42 -04:00
parent e22a309c33
commit 3d39cab82d
2 changed files with 18 additions and 16 deletions

View File

@ -23,24 +23,24 @@ type ObjectContainsNoRequired<T> = T extends ObjectContainingNoRequired<T>
: false; : false;
// TODO: Missing types for: // TODO: Missing types for:
// - Navigating to route without parameters, with parameters
// - Navigating to route with required parameters, without parameters // - Navigating to route with required parameters, without parameters
type Parameters<TParameters> = TParameters extends void type Parameters<TParameters> = ObjectContainsNoRequired<TParameters> extends true
? { parameters?: never }
: ObjectContainsNoRequired<TParameters> extends true
? { parameters?: TParameters } ? { parameters?: TParameters }
: { parameters: TParameters }; : { parameters: TParameters };
export type NavigateToRouteOptions<TParameter> = Parameters<TParameter> & { export type NavigateToRouteOptions<TParameter extends object> = Parameters<TParameter> & BaseNavigateToRouteOptions;
export interface BaseNavigateToRouteOptions {
query?: Record<string, string>; query?: Record<string, string>;
fragment?: string; fragment?: string;
withoutAffectingBackButton?: boolean; withoutAffectingBackButton?: boolean;
}; }
export type NavigateToRoute = <TRoute extends Route<TParameter>, TParameter extends object | void>( export interface NavigateToRoute {
route: TRoute, (route: Route<void>, options?: BaseNavigateToRouteOptions): void;
options?: NavigateToRouteOptions<TParameter>, <TParameters extends Record<TRequiredKeys, string | number>, TRequiredKeys extends string>(route: Route<TParameters>, opts: NavigateToRouteOptions<TParameters>): void;
) => void; <TParameters extends object>(route: Route<TParameters>, opts?: NavigateToRouteOptions<TParameters>): void;
}
export const navigateToRouteInjectionToken = getInjectionToken<NavigateToRoute>({ export const navigateToRouteInjectionToken = getInjectionToken<NavigateToRoute>({
id: "navigate-to-route-injection-token", id: "navigate-to-route-injection-token",

View File

@ -6,15 +6,17 @@ import { getInjectable } from "@ogre-tools/injectable";
import type { Route } from "../../../../common/front-end-routing/front-end-route-injection-token"; import type { Route } from "../../../../common/front-end-routing/front-end-route-injection-token";
import { navigateToRouteInjectionToken } from "../../../../common/front-end-routing/navigate-to-route-injection-token"; import { navigateToRouteInjectionToken } from "../../../../common/front-end-routing/navigate-to-route-injection-token";
export interface NavigateToPreferenceTabFor {
(route: Route<void>): () => void;
}
const navigateToPreferenceTabInjectable = getInjectable({ const navigateToPreferenceTabInjectable = getInjectable({
id: "navigate-to-preference-tab", id: "navigate-to-preference-tab",
instantiate: (di) => { instantiate: (di): NavigateToPreferenceTabFor => {
const navigateToRoute = di.inject(navigateToRouteInjectionToken); const navigateToRoute = di.inject(navigateToRouteInjectionToken);
return <Parameter extends object | void>(route: Route<Parameter>) => () => { return (route) => () => navigateToRoute(route, { withoutAffectingBackButton: true });
navigateToRoute(route, { withoutAffectingBackButton: true });
};
}, },
}); });