Skip to content
This repository has been archived by the owner on Jan 11, 2023. It is now read-only.

Cannot use namespace 'SapperRequest' as a type #1748

Open
danawoodman opened this issue Mar 16, 2021 · 0 comments
Open

Cannot use namespace 'SapperRequest' as a type #1748

danawoodman opened this issue Mar 16, 2021 · 0 comments

Comments

@danawoodman
Copy link

danawoodman commented Mar 16, 2021

Describe the bug
Trying to use type definitions of SapperRequest and SapperResponse but getting Cannot use namespace 'SapperRequest' as a type instead of types.

image

import type { SapperRequest, SapperResponse } from "@sapper/server";

export async function get(req: SapperRequest, res: SapperResponse) {
  res.json({ hello: "world" });
}

tsconfig.json:

{
  "extends": "@tsconfig/svelte/tsconfig.json",
  "compilerOptions": {
    "lib": ["DOM", "ES2017", "WebWorker"]
  },
  "include": ["src/**/*", "src/node_modules/**/*"],
  "exclude": ["node_modules/*", "__sapper__/*", "static/*"]
}

src/node_modules/@sapper/index.d.ts:

declare module '@sapper/app'
declare module '@sapper/server'
declare module '@sapper/service-worker'
declare module '@sapper/common'

declare module '@sapper/app' {
	export interface Redirect {
		statusCode: number
		location: string
	}

	export function goto(href: string, opts: { noscroll?: boolean, replaceState?: boolean }): Promise<void>;
	export function prefetch(href: string): Promise<{ redirect?: Redirect; data?: unknown }>;
	export function prefetchRoutes(pathnames: string[]): Promise<void>;
	export function start(opts: { target: Node }): Promise<void>;
	export const stores: () => unknown;
}

declare module '@sapper/server' {
	import { Handler, Req, Res } from '@sapper/internal/manifest-server';

	export type Ignore = string | RegExp | ((uri: string) => boolean) | Ignore[];

	export interface MiddlewareOptions {
		session?: (req: Req, res: Res) => unknown
		ignore?: Ignore
	}

	export function middleware(opts: MiddlewareOptions): Handler;
}

declare module '@sapper/service-worker' {
	export const timestamp: number;
	export const files: string[];
	export const assets: string[];
	export const shell: string[];
	export const routes: Array<{ pattern: RegExp }>;
}

declare module '@sapper/common' {
	export interface PreloadContext {
		fetch: (url: string, options?: any) => Promise<any>;
		error: (statusCode: number, message: Error | string) => void;
		redirect: (statusCode: number, location: string) => void;
	}

	export interface Page {
		host: string;
		path: string;
		params: Record<string, string>;
		query: Record<string, string | string[]>;
		error?: Error;
	}

	export interface Preload {
		(this: PreloadContext, page: Page, session: any): object | Promise<object>;
	}
}

Logs
n/a

To Reproduce
I think just start a blank Sapper repo, run Typescript setup and then create a route like above

Expected behavior
Should show proper types

Stacktraces
n/a

Information about your Sapper Installation:

  System:
    OS: macOS 11.2
    CPU: (8) arm64 Apple M1
    Memory: 86.23 MB / 16.00 GB
    Shell: 5.8 - /bin/zsh
  Binaries:
    Node: 15.8.0 - ~/.nvm/versions/node/v15.8.0/bin/node
    npm: 7.5.1 - ~/.nvm/versions/node/v15.8.0/bin/npm
  Browsers:
    Brave Browser: 89.1.21.73
    Chrome: 89.0.4389.82
    Safari: 14.0.3
  npmPackages:
    rollup: ^2.3.4 => 2.40.0
    sapper: ^0.28.0 => 0.28.10
    svelte: ^3.17.3 => 3.35.0

Severity
Not critical, just annoying; can't use Sapper types

Additional context
Add any other context about the problem here.

May relate to #1583 (comment)

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant