-
-
Notifications
You must be signed in to change notification settings - Fork 107
New issue
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
Typescript problematic types after "wrapping" the route #314
Comments
Not sure if this is correct, but I've had success with this patch on this package. diff --git a/Router.d.ts b/Router.d.ts
index e64617ba7997d48654331f3f44791e1d8230e8d0..773c82317d253c103896b83c06446c9c855fc5ce 100644
--- a/Router.d.ts
+++ b/Router.d.ts
@@ -1,6 +1,6 @@
///<reference types="svelte" />
-import {SvelteComponent} from 'svelte'
+import {SvelteComponent, ComponentType} from 'svelte'
import {Readable} from 'svelte/store'
/** Dictionary with route details passed to the pre-conditions functions, as well as the `routeLoading` and `conditionsFailed` events */
@@ -24,7 +24,7 @@ export interface RouteDetail {
/** Detail object for the `routeLoaded` event */
export interface RouteDetailLoaded extends RouteDetail {
/** Svelte component */
- component: typeof SvelteComponent
+ component: ComponentType
/** Name of the Svelte component that was loaded (note: might be minified in production) */
name: string
@@ -34,7 +34,7 @@ export interface RouteDetailLoaded extends RouteDetail {
* This is a Svelte component loaded asynchronously.
* It's meant to be used with the `import()` function, such as `() => import('Foo.svelte')}`
*/
-export type AsyncSvelteComponent = () => Promise<{default: typeof SvelteComponent}>
+export type AsyncSvelteComponent = () => Promise<{default: ComponentType}>
/**
* Route pre-condition function. This is a callback that receives a RouteDetail object as argument containing information on the route that we're trying to load.
@@ -50,7 +50,7 @@ export type RoutePrecondition = (detail: RouteDetail) => (boolean | Promise<bool
/** Object returned by the `wrap` method */
export interface WrappedComponent {
/** Component to load (this is always asynchronous) */
- component: typeof SvelteComponent
+ component: ComponentType
/** Route pre-conditions to validate */
conditions?: RoutePrecondition[]
@@ -152,8 +152,8 @@ export const params: Readable<Record<string, string> | undefined>
// Note: the above is implemented as writable but exported as readable because consumers should not modify the value
/** List of routes */
-export type RouteDefinition = Record<string, typeof SvelteComponent | WrappedComponent> |
- Map<string | RegExp, typeof SvelteComponent | WrappedComponent>
+export type RouteDefinition = Record<string, ComponentType | WrappedComponent> |
+ Map<string | RegExp, ComponentType | WrappedComponent>
/** Generic interface for events from the router */
interface RouterEvent<T> {
|
@laat Nice, I haven't tried it yet, but I think it looks great! Can you maybe create a PR with these changes please? Thx :) |
Merged
# for free
to join this conversation on GitHub.
Already have an account?
# to comment
VSCode is complaining when I try to use a wrap function for a route and then specify component/asyncComponent inside wrap - it does not complain when I use it basically like this:
1] scenario:
2] scenario:
(I edited paths for 2nd scenario, so normally it would start with /home/something/...)
My dev dependencies:
I tried searching for this issue but I haven't find any. Also I tried some hacky solutions via typescript "as" keyword, but with no success.
The text was updated successfully, but these errors were encountered: