参考
类型
在 GitHub 上编辑此页面公共类型永久链接
可以从 @sveltejs/kit 导入以下类型
Action永久链接
+page.server.js 中 export const actions = {..} 的一部分,即表单操作方法的形状。有关更多信息,请参阅 表单操作。
tstype Action<Params extends Partial<Record<string, string>> = Partial<Record<string, string>>,OutputData extends Record<string, any> | void = Record<string,any> | void,RouteId extends string | null = string | null> = (event: RequestEvent<Params, RouteId>) => MaybePromise<OutputData>;
ActionFailure永久链接
tsinterface ActionFailure<T extends Record<string, unknown> | undefined = undefined> {…}
tsstatus: number;
tsdata: T;
ts[uniqueSymbol]: true;
ActionResult永久链接
通过获取调用表单操作时,响应将采用以下形状之一。
<form method="post" use:enhance={() => {
return ({ result }) => {
// result is of type ActionResult
};
}}tstype ActionResult<Success extends| Record<string, unknown>| undefined = Record<string, any>,Failure extends| Record<string, unknown>| undefined = Record<string, any>> =| { type: 'success'; status: number; data?: Success }| { type: 'failure'; status: number; data?: Failure }| { type: 'redirect'; status: number; location: string }| { type: 'error'; status?: number; error: any };
Actions永久链接
+page.server.js 中 export const actions = {..} 对象的形状。有关更多信息,请参阅 表单操作。
tstype Actions<Params extends Partial<Record<string, string>> = Partial<Record<string, string>>,OutputData extends Record<string, any> | void = Record<string,any> | void,RouteId extends string | null = string | null> = Record<string, Action<Params, OutputData, RouteId>>;
Adapter永久链接
适配器负责采用生产版本并将其转化为可以部署到您选择的平台上的内容。
tsinterface Adapter {…}
tsname: string;
适配器的名称,用于记录。通常对应于包名称。
tsadapt(builder: Builder): MaybePromise<void>;
builderSvelteKit 提供的一个对象,其中包含用于调整应用程序的方法
此函数在 SvelteKit 构建您的应用程序后调用。
tssupports?: {…}
在开发和构建期间调用的检查,以确定特定功能是否可以在使用此适配器的生产环境中运行
tsread?: (details: { config: any; route: { id: string } }) => boolean;
config合并的路由配置
对 $app/server 中 read 的测试支持
tsemulate?(): MaybePromise<Emulator>;
创建 Emulator,它允许适配器在开发、构建和预渲染期间影响环境
AfterNavigate永久链接
传递给 afterNavigate 回调的参数。
tsinterface AfterNavigate extends Omit<Navigation, 'type'> {…}
tstype: Exclude<NavigationType, 'leave'>;
导航类型
enter:应用程序已水化form:用户提交了一个<form>link:导航由链接点击触发goto:导航由goto(...)调用或重定向触发popstate:导航由后退/前进导航触发
tswillUnload: false;
由于 afterNavigate 回调在导航完成后才调用,因此它们永远不会在卸载页面的导航中被调用。
AwaitedActionspermalink
tstype AwaitedActions<T extends Record<string, (...args: any) => any>> = OptionalUnion<{[Key in keyof T]: UnpackValidationError<Awaited<ReturnType<T[Key]>>>;}[keyof T]>;
BeforeNavigatepermalink
传递给 beforeNavigate 回调的参数。
tsinterface BeforeNavigate extends Navigation {…}
tscancel(): void;
调用此方法可防止导航启动。
Builderpermalink
此对象传递给适配器的 adapt 函数。它包含各种对适配应用程序有用的方法和属性。
tsinterface Builder {…}
tslog: Logger;
将消息打印到控制台。除非 Vite 的 logLevel 为 info,否则 log.info 和 log.minor 将保持静默。
tsrimraf(dir: string): void;
删除 dir 及其所有内容。
tsmkdirp(dir: string): void;
创建 dir 和所有必需的父目录。
tsconfig: ValidatedConfig;
完全解析的 svelte.config.js。
tsprerendered: Prerendered;
有关预渲染页面和资产(如果有)的信息。
tsroutes: RouteDefinition[];
所有路由(包括预渲染)的数组
tscreateEntries(fn: (route: RouteDefinition) => AdapterEntry): Promise<void>;
fn将一组路由分组到一个入口点中的函数- 已弃用 改用
builder.routes
创建映射到应用程序的一个或多个路由的单独函数。
tsfindServerAssets(routes: RouteDefinition[]): string[];
查找属于 routes 的服务器文件导入的所有资产
tsgenerateFallback(dest: string): Promise<void>;
为静态 Web 服务器生成一个备用页面,在没有匹配的路由时使用。对单页应用程序很有用。
tsgenerateEnvModule(): void;
生成一个模块,将构建时环境变量公开为 $env/dynamic/public。
tsgenerateManifest(opts: { relativePath: string; routes?: RouteDefinition[] }): string;
opts应用程序基本目录的相对路径,还可以选择生成清单的格式(esm 或 cjs)
生成服务器端清单以初始化 SvelteKit 服务器。
tsgetBuildDirectory(name: string): string;
name相对于构建目录的文件路径
解析 outDir 中 name 目录的路径,例如 /path/to/.svelte-kit/my-adapter。
tsgetClientDirectory(): string;
获取包含客户端资产的目录的完全解析路径,包括 static 目录的内容。
tsgetServerDirectory(): string;
获取包含服务器端代码的目录的完全解析路径。
tsgetAppPath(): string;
获取应用程序路径,包括任何配置的 base 路径,例如 my-base-path/_app。
tswriteClient(dest: string): string[];
dest目标文件夹- 返回 写入
dest的文件数组
将客户端资产写入 dest。
tswritePrerendered(dest: string): string[];
dest目标文件夹- 返回 写入
dest的文件数组
将预渲染文件写入 dest。
tswriteServer(dest: string): string[];
dest目标文件夹- 返回 写入
dest的文件数组
将服务器端代码写入dest。
tscopy(from: string,to: string,opts?: {filter?(basename: string): boolean;replace?: Record<string, string>;}): string[];
- 从源文件或目录
from - 到目标文件或目录
to opts.filter一个函数,用于确定是否应复制文件或目录opts.replace一个要替换的字符串映射- returns一个已复制文件的数组
复制文件或目录。
tscompress(directory: string): Promise<void>;
directory包含要压缩的文件的目录
在directory中使用 gzip 和 brotli(如果适用)压缩文件。在原始文件旁边生成.gz和.br文件。
配置永久链接
tsinterface Config {…}
有关详细信息,请参阅配置参考。
Cookie永久链接
tsinterface Cookies {…}
tsget(name: string, opts?: import('cookie').CookieParseOptions): string | undefined;
nameCookie 的名称opts选项,直接传递给cookie.parse。请参阅此处的文档
获取之前使用cookies.set或从请求头中设置的 Cookie。
tsgetAll(opts?: import('cookie').CookieParseOptions): Array<{ name: string; value: string }>;
opts选项,直接传递给cookie.parse。请参阅此处的文档
获取之前使用cookies.set或从请求头中设置的所有 Cookie。
tsset(name: string,value: string,opts: import('cookie').CookieSerializeOptions & { path: string }): void;
nameCookie 的名称valueCookie 值opts选项,直接传递给cookie.serialize。请参阅此处的文档
设置 Cookie。这会向响应中添加一个set-cookie头,但也会在当前请求期间通过cookies.get或cookies.getAll获取 Cookie。
默认情况下,httpOnly和secure选项为true(除了在https://上,其中secure为false),并且如果您希望 Cookie 可被客户端 JavaScript 读取和/或通过 HTTP 传输,则必须显式禁用这些选项。sameSite选项默认为lax。
您必须为 Cookie 指定path。在大多数情况下,您应该显式设置path: '/'以使 Cookie 在整个应用程序中可用。您可以使用相对路径,或设置path: ''以使 Cookie 仅在当前路径及其子路径上可用
tsdelete(name: string, opts: import('cookie').CookieSerializeOptions & { path: string }): void;
nameCookie 的名称opts选项,直接传递给cookie.serialize。path必须与要删除的 Cookie 的路径匹配。请参阅此处的文档
通过将 Cookie 的值设置为一个空字符串并在过去设置到期日期来删除 Cookie。
您必须为 Cookie 指定path。在大多数情况下,您应该显式设置path: '/'以使 Cookie 在整个应用程序中可用。您可以使用相对路径,或设置path: ''以使 Cookie 仅在当前路径及其子路径上可用
tsserialize(name: string,value: string,opts: import('cookie').CookieSerializeOptions & { path: string }): string;
nameCookie 的名称valueCookie 值opts选项,直接传递给cookie.serialize。请参阅此处的文档
将 Cookie 名称-值对序列化为 Set-Cookie 标头字符串,但不要将其应用于响应。
默认情况下,httpOnly和secure选项为true(除了在https://上,其中secure为false),并且如果您希望 Cookie 可被客户端 JavaScript 读取和/或通过 HTTP 传输,则必须显式禁用这些选项。sameSite选项默认为lax。
您必须为 Cookie 指定path。在大多数情况下,您应该显式设置path: '/'以使 Cookie 在整个应用程序中可用。您可以使用相对路径,或设置path: ''以使 Cookie 仅在当前路径及其子路径上可用
模拟器永久链接
在开发、构建和预渲染期间影响环境的一组函数
tsinterface Emulator {…}
tsplatform?(details: { config: any; prerender: PrerenderOption }): MaybePromise<App.Platform>;
使用当前路由 config 和 prerender 选项调用的函数,并返回一个 App.Platform 对象
处理永久链接
handle 钩子在 SvelteKit 服务器每次收到 请求 时运行,并确定 响应。它接收一个表示请求的 event 对象和一个名为 resolve 的函数,该函数渲染路由并生成 Response。这允许你修改响应标头或正文,或完全绕过 SvelteKit(例如,以编程方式实现路由)。
tstype Handle = (input: {event: RequestEvent;resolve(event: RequestEvent,opts?: ResolveOptions): MaybePromise<Response>;}) => MaybePromise<Response>;
HandleClientError永久链接
当导航时抛出意外错误时,客户端 handleError 钩子运行。
如果在加载或后续渲染期间抛出意外错误,此函数将使用错误和事件调用。确保此函数绝不抛出错误。
tstype HandleClientError = (input: {error: unknown;event: NavigationEvent;status: number;message: string;}) => MaybePromise<void | App.Error>;
HandleFetch永久链接
handleFetch 钩子允许你修改(或替换)在服务器上(或预渲染期间)运行的 load 函数中发生的 fetch 请求
tstype HandleFetch = (input: {event: RequestEvent;request: Request;fetch: typeof fetch;}) => MaybePromise<Response>;
HandleServerError永久链接
当响应请求时抛出意外错误时,服务器端 handleError 钩子运行。
如果在加载或渲染期间抛出意外错误,此函数将使用错误和事件调用。确保此函数绝不抛出错误。
tstype HandleServerError = (input: {error: unknown;event: RequestEvent;status: number;message: string;}) => MaybePromise<void | App.Error>;
HttpError永久链接
error 函数返回的对象。
KitConfig永久链接
tsinterface KitConfig {…}
有关详细信息,请参阅配置参考。
LessThan永久链接
tstype LessThan<TNumber extends number,TArray extends any[] = []> = TNumber extends TArray['length']? TArray[number]: LessThan<TNumber, [...TArray, TArray['length']]>;
Load永久链接
PageLoad 和 LayoutLoad 的泛型形式。你应该从 ./$types 中导入它们(参见 生成的类型),而不是直接使用 Load。
tstype Load<Params extends Partial<Record<string, string>> = Partial<Record<string, string>>,InputData extends Record<string, unknown> | null = Record<string,any> | null,ParentData extends Record<string, unknown> = Record<string,any>,OutputData extends Record<string,unknown> | void = Record<string, any> | void,RouteId extends string | null = string | null> = (event: LoadEvent<Params, InputData, ParentData, RouteId>) => MaybePromise<OutputData>;
LoadEvent永久链接
PageLoadEvent 和 LayoutLoadEvent 的泛型形式。你应该从 ./$types 中导入它们(参见 生成的类型),而不是直接使用 LoadEvent。
tsinterface LoadEvent<Params extends Partial<Record<string, string>> = Partial<Record<string, string>>,Data extends Record<string, unknown> | null = Record<string,any> | null,ParentData extends Record<string, unknown> = Record<string,any>,RouteId extends string | null = string | null> extends NavigationEvent<Params, RouteId> {…}
tsfetch: typeof fetch;
fetch 等同于 原生 fetch Web API,并带有一些附加功能
- 它可用于在服务器上进行凭据请求,因为它继承了页面请求的
cookie和authorization标头。 - 它可以在服务器上进行相对请求(通常,
fetch在服务器上下文中使用时需要带来源的 URL)。 - 内部请求(例如,针对
+server.js路由的请求)在服务器上运行时会直接转到处理程序函数,而不会产生 HTTP 调用的开销。 - 在服务器端渲染期间,响应将被捕获并通过连接到
Response对象的text和json方法内联到渲染的 HTML 中。请注意,标头不会被序列化,除非通过filterSerializedResponseHeaders显式包含。 - 在水化期间,响应将从 HTML 中读取,从而保证一致性并防止额外的网络请求。
你可以 在此处 了解有关使用 Cookie 进行凭据请求的更多信息
tsdata: Data;
包含路由的服务器 load 函数(在 +layout.server.js 或 +page.server.js 中)返回的数据(如果有)。
tssetHeaders(headers: Record<string, string>): void;
如果你需要为响应设置标头,可以使用此方法。例如,如果你希望页面被缓存,这会很有用
tsexport async functionBinding element 'fetch' implicitly has an 'any' type.load ({, fetch }) { setHeaders
Binding element 'setHeaders' implicitly has an 'any' type.7031
7031Binding element 'fetch' implicitly has an 'any' type.
Binding element 'setHeaders' implicitly has an 'any' type.consturl = `https://cms.example.com/articles.json`;constresponse = awaitfetch (url );setHeaders ({age :response .headers .get ('age'),'cache-control':response .headers .get ('cache-control')});returnresponse .json ();}
tsexport async functionBinding element 'fetch' implicitly has an 'any' type.load ({, fetch }) { setHeaders
Binding element 'setHeaders' implicitly has an 'any' type.7031
7031Binding element 'fetch' implicitly has an 'any' type.
Binding element 'setHeaders' implicitly has an 'any' type.consturl = `https://cms.example.com/articles.json`;constresponse = awaitfetch (url );setHeaders ({age :response .headers .get ('age'),'cache-control':response .headers .get ('cache-control'),});returnresponse .json ();}
多次设置相同的标头(即使在单独的 load 函数中)是一个错误——你只能设置给定的标头一次。
你不能使用 setHeaders 添加 set-cookie 标头——相反,在仅限服务器的 load 函数中使用 cookies API。
当 load 函数在浏览器中运行时,setHeaders 不起作用。
tsparent(): Promise<ParentData>;
await parent() 返回父 +layout.js load 函数中的数据。隐式地,一个缺失的 +layout.js 被视为一个 ({ data }) => data 函数,这意味着它将返回并转发父 +layout.server.js 文件中的数据。
使用 await parent() 时,小心不要引入意外的瀑布。例如,如果你只想将父数据合并到返回的输出中,请在获取其他数据之后调用它。
tsdepends(...deps: Array<`${string}:${string}`>): void;
此函数声明 load 函数对一个或多个 URL 或自定义标识符具有依赖关系,随后可以使用 invalidate() 来导致 load 重新运行。
大多数情况下你不需要这样做,因为 fetch 会代表你调用 depends — 只有在你使用绕过 fetch 的自定义 API 客户端时才需要。
URL 可以是绝对的,也可以相对于正在加载的页面,并且必须编码。
自定义标识符必须以一个或多个小写字母开头,后跟一个冒号,以符合URI 规范。
以下示例展示了如何使用 depends 来注册对自定义标识符的依赖关系,该标识符在按钮单击后被invalidate,从而使 load 函数重新运行。
tsletcount = 0;export async functionBinding element 'depends' implicitly has an 'any' type.7031Binding element 'depends' implicitly has an 'any' type.load ({}) { depends depends ('increase:count');return {count :count ++ };}
tsletcount = 0;export async functionBinding element 'depends' implicitly has an 'any' type.7031Binding element 'depends' implicitly has an 'any' type.load ({}) { depends depends ('increase:count');return {count :count ++ };}
<script>
import { invalidate } from '$app/navigation';
export let data;
const increase = async () => {
await invalidate('increase:count');
}
</script>
<p>{data.count}<p>
<button on:click={increase}>Increase Count</button>tsuntrack<T>(fn: () => T): T;
使用此函数来选择退出对回调中同步调用的一切内容的依赖关系跟踪。示例
tsexport async functionBinding element 'untrack' implicitly has an 'any' type.load ({, untrack }) { url
Binding element 'url' implicitly has an 'any' type.7031
7031Binding element 'untrack' implicitly has an 'any' type.
Binding element 'url' implicitly has an 'any' type.// Untrack url.pathname so that path changes don't trigger a rerunif (untrack (() =>url .pathname === '/')) {return {message : 'Welcome!' };}}
tsexport async functionBinding element 'untrack' implicitly has an 'any' type.load ({, untrack }) { url
Binding element 'url' implicitly has an 'any' type.7031
7031Binding element 'untrack' implicitly has an 'any' type.
Binding element 'url' implicitly has an 'any' type.// Untrack url.pathname so that path changes don't trigger a rerunif (untrack (() =>url .pathname === '/')) {return {message : 'Welcome!' };}}
LoadPropertiespermalink
tstype LoadProperties<input extends Record<string, any> | void> = input extends void? undefined // needs to be undefined, because void will break intellisense: input extends Record<string, any>? input: unknown;
Navigationpermalink
tsinterface Navigation {…}
tsfrom: NavigationTarget | null;
导航触发的位置
tsto: NavigationTarget | null;
导航将去/已去的位置
tstype: Exclude<NavigationType, 'enter'>;
导航类型
form:用户提交了一个<form>leave:应用程序正在离开,可能是因为选项卡正在关闭或正在导航到其他文档link:导航由链接点击触发goto:导航由goto(...)调用或重定向触发popstate:导航由后退/前进导航触发
tswillUnload: boolean;
导航是否会导致页面卸载(即不是客户端导航)
tsdelta?: number;
在历史记录后退/前进导航的情况下,后退/前进的步数
tscomplete: Promise<void>;
一个在导航完成后解决,并在导航失败或中止时拒绝的 Promise。在 willUnload 导航的情况下,Promise 永远不会解决
NavigationEventpermalink
tsinterface NavigationEvent<Params extends Partial<Record<string, string>> = Partial<Record<string, string>>,RouteId extends string | null = string | null> {…}
tsparams: Params;
当前页面的参数 - 例如,对于像 /blog/[slug] 这样的路由,一个 { slug: string } 对象
tsroute: {…}
关于当前路由的信息
tsid: RouteId;
当前路由的 ID - 例如对于 src/routes/blog/[slug],它将是 /blog/[slug]
tsurl: URL;
当前页面的 URL
NavigationTarget永久链接
特定导航目标的信息。
tsinterface NavigationTarget {…}
tsparams: Record<string, string> | null;
目标页面的参数 - 例如对于 /blog/[slug] 这样的路由,一个 { slug: string } 对象。如果目标不是 SvelteKit 应用程序的一部分(无法解析为路由),则为 null。
tsroute: { id: string | null };
有关目标路由的信息
tsurl: URL;
导航到的 URL
NavigationType永久链接
enter:应用程序已水化form:用户提交了一个带有 GET 方法的<form>leave:用户通过关闭标签页或使用后退/前进按钮转到其他文档,从而离开应用程序link:导航由链接点击触发goto:导航由goto(...)调用或重定向触发popstate:导航由后退/前进导航触发
tstype NavigationType =| 'enter'| 'form'| 'leave'| 'link'| 'goto'| 'popstate';
NumericRange永久链接
tstype NumericRange<TStart extends number,TEnd extends number> = Exclude<TEnd | LessThan<TEnd>, LessThan<TStart>>;
OnNavigate永久链接
传递给 onNavigate 回调的参数。
tsinterface OnNavigate extends Navigation {…}
tstype: Exclude<NavigationType, 'enter' | 'leave'>;
导航类型
form:用户提交了一个<form>link:导航由链接点击触发goto:导航由goto(...)调用或重定向触发popstate:导航由后退/前进导航触发
tswillUnload: false;
由于 onNavigate 回调在客户端导航之前立即调用,因此永远不会使用卸载页面的导航来调用它们。
Page永久链接
$page 存储的形状
tsinterface Page<Params extends Record<string, string> = Record<string,string>,RouteId extends string | null = string | null> {…}
tsurl: URL;
当前页面的 URL
tsparams: Params;
当前页面的参数 - 例如,对于像 /blog/[slug] 这样的路由,一个 { slug: string } 对象
tsroute: {…}
关于当前路由的信息
tsid: RouteId;
当前路由的 ID - 例如对于 src/routes/blog/[slug],它将是 /blog/[slug]
tsstatus: number;
当前页面的 Http 状态代码
tserror: App.Error | null;
当前页面的错误对象(如果有)。从 handleError 钩子中填充。
tsdata: App.PageData & Record<string, any>;
当前页面上所有 load 函数的所有数据的合并结果。你可以通过 App.PageData 输入一个公分母。
tsstate: App.PageState;
页面状态,可以使用 $app/navigation 中的 pushState 和 replaceState 函数进行操作。
tsform: any;
仅在提交表单后填充。有关更多信息,请参阅 表单操作。
ParamMatcher永久链接
参数匹配器的形状。有关更多信息,请参阅 匹配。
tstype ParamMatcher = (param: string) => boolean;
PrerenderOption永久链接
tstype PrerenderOption = boolean | 'auto';
Redirect永久链接
由 redirect 函数返回的对象
tsinterface Redirect {…}
tsstatus: 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308;
HTTP 状态代码,范围为 300-308。
tslocation: string;
重定向到的位置。
RequestEvent永久链接
tsinterface RequestEvent<Params extends Partial<Record<string, string>> = Partial<Record<string, string>>,RouteId extends string | null = string | null> {…}
tscookies: Cookies;
获取或设置与当前请求相关的 cookie
tsfetch: typeof fetch;
fetch 等同于 原生 fetch Web API,并带有一些附加功能
- 它可用于在服务器上进行凭据请求,因为它继承了页面请求的
cookie和authorization标头。 - 它可以在服务器上进行相对请求(通常,
fetch在服务器上下文中使用时需要带来源的 URL)。 - 内部请求(例如,针对
+server.js路由的请求)在服务器上运行时会直接转到处理程序函数,而不会产生 HTTP 调用的开销。 - 在服务器端渲染期间,响应将被捕获并通过连接到
Response对象的text和json方法内联到渲染的 HTML 中。请注意,标头不会被序列化,除非通过filterSerializedResponseHeaders显式包含。 - 在水化期间,响应将从 HTML 中读取,从而保证一致性并防止额外的网络请求。
你可以 在此处 了解有关使用 Cookie 进行凭据请求的更多信息
tsgetClientAddress(): string;
客户端的 IP 地址,由适配器设置。
tslocals: App.Locals;
包含在 handle 钩子 中添加到请求中的自定义数据。
tsparams: Params;
当前路由的参数 - 例如,对于像 /blog/[slug] 这样的路由,一个 { slug: string } 对象
tsplatform: Readonly<App.Platform> | undefined;
通过适配器提供的附加数据。
tsrequest: Request;
原始请求对象
tsroute: {…}
关于当前路由的信息
tsid: RouteId;
当前路由的 ID - 例如对于 src/routes/blog/[slug],它将是 /blog/[slug]
tssetHeaders(headers: Record<string, string>): void;
如果你需要为响应设置标头,可以使用此方法。例如,如果你希望页面被缓存,这会很有用
tsexport async functionBinding element 'fetch' implicitly has an 'any' type.load ({, fetch }) { setHeaders
Binding element 'setHeaders' implicitly has an 'any' type.7031
7031Binding element 'fetch' implicitly has an 'any' type.
Binding element 'setHeaders' implicitly has an 'any' type.consturl = `https://cms.example.com/articles.json`;constresponse = awaitfetch (url );setHeaders ({age :response .headers .get ('age'),'cache-control':response .headers .get ('cache-control')});returnresponse .json ();}
tsexport async functionBinding element 'fetch' implicitly has an 'any' type.load ({, fetch }) { setHeaders
Binding element 'setHeaders' implicitly has an 'any' type.7031
7031Binding element 'fetch' implicitly has an 'any' type.
Binding element 'setHeaders' implicitly has an 'any' type.consturl = `https://cms.example.com/articles.json`;constresponse = awaitfetch (url );setHeaders ({age :response .headers .get ('age'),'cache-control':response .headers .get ('cache-control'),});returnresponse .json ();}
多次设置相同的标头(即使在单独的 load 函数中)是一个错误——你只能设置给定的标头一次。
您不能使用 setHeaders 添加 set-cookie 标头 - 请改用 cookies API。
tsurl: URL;
请求的 URL。
tsisDataRequest: boolean;
如果请求来自客户端请求 +page/layout.server.js 数据,则为 true。在这种情况下,url 属性将被剥离与数据请求相关的内部信息。如果此区别对您很重要,请改用此属性。
tsisSubRequest: boolean;
对于来自 SvelteKit 的 +server.js 调用,true,而无需实际进行 HTTP 请求的开销。当您在服务器上进行同源 fetch 请求时,就会发生这种情况。
RequestHandler永久链接
从 +server.js 文件导出的 (event: RequestEvent) => Response 函数,它对应于一个 HTTP 动词(GET、PUT、PATCH 等),并处理使用该方法的请求。
它接收 Params 作为第一个泛型参数,您可以使用 生成的类型 来跳过它。
tstype RequestHandler<Params extends Partial<Record<string, string>> = Partial<Record<string, string>>,RouteId extends string | null = string | null> = (event: RequestEvent<Params, RouteId>) => MaybePromise<Response>;
Reroute永久链接
reroute 钩子允许您在使用 URL 确定要渲染哪个路由之前修改 URL。
tstype Reroute = (event: { url: URL }) => void | string;
ResolveOptions永久链接
tsinterface ResolveOptions {…}
tstransformPageChunk?(input: { html: string; done: boolean }): MaybePromise<string | undefined>;
inputhtml 块和此是否是最后一个块的信息
对 HTML 应用自定义转换。如果 done 为 true,则它是最后一个块。不能保证块是格式良好的 HTML(例如,它们可能包含元素的开始标签,但不包含其结束标签),但它们总是会在 %sveltekit.head% 或布局/页面组件等明智的边界处分割。
tsfilterSerializedResponseHeaders?(name: string, value: string): boolean;
name头部名称value头部值
确定在使用 fetch 的 load 函数加载资源时,哪些头部应包含在序列化的响应中。默认情况下,不包含任何头部。
tspreload?(input: { type: 'font' | 'css' | 'js' | 'asset'; path: string }): boolean;
input文件类型及其路径
确定应添加到 <head> 标记中以预加载的内容。默认情况下,将预加载 js 和 css 文件。
RouteDefinitionpermalink
tsinterface RouteDefinition<Config = any> {…}
tsid: string;
tsapi: {methods: Array<HttpMethod | '*'>;};
tspage: {methods: Array<Extract<HttpMethod, 'GET' | 'POST'>>;};
tspattern: RegExp;
tsprerender: PrerenderOption;
tssegments: RouteSegment[];
tsmethods: Array<HttpMethod | '*'>;
tsconfig: Config;
SSRManifestpermalink
tsinterface SSRManifest {…}
tsappDir: string;
tsappPath: string;
tsassets: Set<string>;
tsmimeTypes: Record<string, string>;
ts_: {…}
私有字段
tsclient: NonNullable<BuildData['client']>;
tsnodes: SSRNodeLoader[];
tsroutes: SSRRoute[];
tsmatchers(): Promise<Record<string, ParamMatcher>>;
tsserver_assets: Record<string, number>;
服务器代码导入的所有资产的 [file]: size 映射
Serverpermalink
tsclass Server {…}
tsconstructor(manifest: SSRManifest);
tsinit(options: ServerInitOptions): Promise<void>;
tsrespond(request: Request, options: RequestOptions): Promise<Response>;
ServerInitOptionspermalink
tsinterface ServerInitOptions {…}
tsenv: Record<string, string>;
环境变量的映射
tsread?: (file: string) => ReadableStream;
将资产文件名转换为 ReadableStream 的函数。$app/server 中的 read 导出才能正常工作
ServerLoadpermalink
PageServerLoad 和 LayoutServerLoad 的通用形式。你应该从 ./$types(参见 生成类型)导入这些类型,而不是直接使用 ServerLoad。
tstype ServerLoad<Params extends Partial<Record<string, string>> = Partial<Record<string, string>>,ParentData extends Record<string, any> = Record<string,any>,OutputData extends Record<string, any> | void = Record<string,any> | void,RouteId extends string | null = string | null> = (event: ServerLoadEvent<Params, ParentData, RouteId>) => MaybePromise<OutputData>;
ServerLoadEventpermalink
tsinterface ServerLoadEvent<Params extends Partial<Record<string, string>> = Partial<Record<string, string>>,ParentData extends Record<string, any> = Record<string,any>,RouteId extends string | null = string | null> extends RequestEvent<Params, RouteId> {…}
tsparent(): Promise<ParentData>;
await parent() 从父 +layout.server.js load 函数返回数据。
使用 await parent() 时,小心不要引入意外的瀑布。例如,如果你只想将父数据合并到返回的输出中,请在获取其他数据之后调用它。
tsdepends(...deps: string[]): void;
此函数声明 load 函数对一个或多个 URL 或自定义标识符具有依赖关系,随后可以使用 invalidate() 来导致 load 重新运行。
大多数情况下你不需要这样做,因为 fetch 会代表你调用 depends — 只有在你使用绕过 fetch 的自定义 API 客户端时才需要。
URL 可以是绝对的,也可以相对于正在加载的页面,并且必须编码。
自定义标识符必须以一个或多个小写字母开头,后跟一个冒号,以符合URI 规范。
以下示例展示了如何使用 depends 来注册对自定义标识符的依赖关系,该标识符在按钮单击后被invalidate,从而使 load 函数重新运行。
tsletcount = 0;export async functionBinding element 'depends' implicitly has an 'any' type.7031Binding element 'depends' implicitly has an 'any' type.load ({}) { depends depends ('increase:count');return {count :count ++ };}
tsletcount = 0;export async functionBinding element 'depends' implicitly has an 'any' type.7031Binding element 'depends' implicitly has an 'any' type.load ({}) { depends depends ('increase:count');return {count :count ++ };}
<script>
import { invalidate } from '$app/navigation';
export let data;
const increase = async () => {
await invalidate('increase:count');
}
</script>
<p>{data.count}<p>
<button on:click={increase}>Increase Count</button>tsuntrack<T>(fn: () => T): T;
使用此函数来选择退出对回调中同步调用的一切内容的依赖关系跟踪。示例
tsexport async functionBinding element 'untrack' implicitly has an 'any' type.load ({, untrack }) { url
Binding element 'url' implicitly has an 'any' type.7031
7031Binding element 'untrack' implicitly has an 'any' type.
Binding element 'url' implicitly has an 'any' type.// Untrack url.pathname so that path changes don't trigger a rerunif (untrack (() =>url .pathname === '/')) {return {message : 'Welcome!' };}}
tsexport async functionBinding element 'untrack' implicitly has an 'any' type.load ({, untrack }) { url
Binding element 'url' implicitly has an 'any' type.7031
7031Binding element 'untrack' implicitly has an 'any' type.
Binding element 'url' implicitly has an 'any' type.// Untrack url.pathname so that path changes don't trigger a rerunif (untrack (() =>url .pathname === '/')) {return {message : 'Welcome!' };}}
Snapshotpermalink
从页面或布局组件导出的 export const snapshot 的类型。
tsinterface Snapshot<T = any> {…}
tscapture: () => T;
tsrestore: (snapshot: T) => void;
SubmitFunctionpermalink
tstype SubmitFunction<Success extends| Record<string, unknown>| undefined = Record<string, any>,Failure extends| Record<string, unknown>| undefined = Record<string, any>> = (input: {action: URL;formData: FormData;formElement: HTMLFormElement;controller: AbortController;submitter: HTMLElement | null;cancel(): void;}) => MaybePromise<| void| ((opts: {formData: FormData;formElement: HTMLFormElement;action: URL;result: ActionResult<Success, Failure>;/*** Call this to get the default behavior of a form submission response.* @param options Set `reset: false` if you don't want the `<form>` values to be reset after a successful submission.* @param invalidateAll Set `invalidateAll: false` if you don't want the action to call `invalidateAll` after submission.*/update(options?: {reset?: boolean;invalidateAll?: boolean;}): Promise<void>;}) => void)>;
私有类型permalink
以下内容由上面记录的公共类型引用,但无法直接导入
AdapterEntrypermalink
tsinterface AdapterEntry {…}
tsid: string;
唯一标识 HTTP 服务(例如无服务器函数)的字符串,用于去重。例如,/foo/a-[b] 和 /foo/[c] 是不同的路由,但都会在 Netlify _redirects 文件中表示为 /foo/:param,因此它们共享一个 ID
tsfilter(route: RouteDefinition): boolean;
将候选路由与当前路由进行比较以确定是否应将其与当前路由分组的函数。
用例
- 后备页面:
/foo/[c]是/foo/a-[b]的后备,/[...catchall]是所有路由的后备 - 对共享公共
config的路由进行分组:/foo应部署到边缘,/bar和/baz应部署到无服务器函数
tscomplete(entry: { generateManifest(opts: { relativePath: string }): string }): MaybePromise<void>;
在创建条目后调用的函数。你应该在此处将函数写入文件系统并生成重定向清单。
Csppermalink
tsnamespace Csp {type ActionSource = 'strict-dynamic' | 'report-sample';type BaseSource =| 'self'| 'unsafe-eval'| 'unsafe-hashes'| 'unsafe-inline'| 'wasm-unsafe-eval'| 'none';type CryptoSource =`${'nonce' | 'sha256' | 'sha384' | 'sha512'}-${string}`;type FrameSource =| HostSource| SchemeSource| 'self'| 'none';type HostNameScheme = `${string}.${string}` | 'localhost';type HostSource =`${HostProtocolSchemes}${HostNameScheme}${PortScheme}`;type HostProtocolSchemes = `${string}://` | '';type HttpDelineator = '/' | '?' | '#' | '\\';type PortScheme = `:${number}` | '' | ':*';type SchemeSource =| 'http:'| 'https:'| 'data:'| 'mediastream:'| 'blob:'| 'filesystem:';type Source =| HostSource| SchemeSource| CryptoSource| BaseSource;type Sources = Source[];}
CspDirectives永久链接
tsinterface CspDirectives {…}
ts'child-src'?: Csp.Sources;
ts'default-src'?: Array<Csp.Source | Csp.ActionSource>;
ts'frame-src'?: Csp.Sources;
ts'worker-src'?: Csp.Sources;
ts'connect-src'?: Csp.Sources;
ts'font-src'?: Csp.Sources;
ts'img-src'?: Csp.Sources;
ts'manifest-src'?: Csp.Sources;
ts'media-src'?: Csp.Sources;
ts'object-src'?: Csp.Sources;
ts'prefetch-src'?: Csp.Sources;
ts'script-src'?: Array<Csp.Source | Csp.ActionSource>;
ts'script-src-elem'?: Csp.Sources;
ts'script-src-attr'?: Csp.Sources;
ts'style-src'?: Array<Csp.Source | Csp.ActionSource>;
ts'style-src-elem'?: Csp.Sources;
ts'style-src-attr'?: Csp.Sources;
ts'base-uri'?: Array<Csp.Source | Csp.ActionSource>;
tssandbox?: Array<| 'allow-downloads-without-user-activation'| 'allow-forms'| 'allow-modals'| 'allow-orientation-lock'| 'allow-pointer-lock'| 'allow-popups'| 'allow-popups-to-escape-sandbox'| 'allow-presentation'| 'allow-same-origin'| 'allow-scripts'| 'allow-storage-access-by-user-activation'| 'allow-top-navigation'| 'allow-top-navigation-by-user-activation'>;
ts'form-action'?: Array<Csp.Source | Csp.ActionSource>;
ts'frame-ancestors'?: Array<Csp.HostSource | Csp.SchemeSource | Csp.FrameSource>;
ts'navigate-to'?: Array<Csp.Source | Csp.ActionSource>;
ts'report-uri'?: string[];
ts'report-to'?: string[];
ts'require-trusted-types-for'?: Array<'script'>;
ts'trusted-types'?: Array<'none' | 'allow-duplicates' | '*' | string>;
ts'upgrade-insecure-requests'?: boolean;
ts'require-sri-for'?: Array<'script' | 'style' | 'script style'>;
- 已弃用 未定义
ts'block-all-mixed-content'?: boolean;
- 已弃用 未定义
ts'plugin-types'?: Array<`${string}/${string}` | 'none'>;
- 已弃用 未定义
tsreferrer?: Array<| 'no-referrer'| 'no-referrer-when-downgrade'| 'origin'| 'origin-when-cross-origin'| 'same-origin'| 'strict-origin'| 'strict-origin-when-cross-origin'| 'unsafe-url'| 'none'>;
- 已弃用 未定义
HttpMethod永久链接
tstype HttpMethod =| 'GET'| 'HEAD'| 'POST'| 'PUT'| 'DELETE'| 'PATCH'| 'OPTIONS';
Logger永久链接
tsinterface Logger {…}
ts(msg: string): void;
tssuccess(msg: string): void;
tserror(msg: string): void;
tswarn(msg: string): void;
tsminor(msg: string): void;
tsinfo(msg: string): void;
MaybePromise永久链接
tstype MaybePromise<T> = T | Promise<T>;
PrerenderEntryGeneratorMismatchHandler永久链接
tsinterface PrerenderEntryGeneratorMismatchHandler {…}
ts(details: { generatedFromId: string; entry: string; matchedId: string; message: string }): void;
PrerenderEntryGeneratorMismatchHandlerValue永久链接
tstype PrerenderEntryGeneratorMismatchHandlerValue =| 'fail'| 'warn'| 'ignore'| PrerenderEntryGeneratorMismatchHandler;
PrerenderHttpErrorHandler永久链接
tsinterface PrerenderHttpErrorHandler {…}
ts(details: {status: number;path: string;referrer: string | null;referenceType: 'linked' | 'fetched';message: string;}): void;
PrerenderHttpErrorHandlerValue永久链接
tstype PrerenderHttpErrorHandlerValue =| 'fail'| 'warn'| 'ignore'| PrerenderHttpErrorHandler;
PrerenderMap永久链接
tstype PrerenderMap = Map<string, PrerenderOption>;
PrerenderMissingIdHandler永久链接
tsinterface PrerenderMissingIdHandler {…}
ts(details: { path: string; id: string; referrers: string[]; message: string }): void;
PrerenderMissingIdHandlerValue永久链接
tstype PrerenderMissingIdHandlerValue =| 'fail'| 'warn'| 'ignore'| PrerenderMissingIdHandler;
PrerenderOption永久链接
tstype PrerenderOption = boolean | 'auto';
Prerendered永久链接
tsinterface Prerendered {…}
tspages: Map<string,{/** The location of the .html file relative to the output directory */file: string;}>;
path 到 { file } 对象的映射,其中像 /foo 这样的路径对应于 foo.html,而像 /bar/ 这样的路径对应于 bar/index.html。
tsassets: Map<string,{/** The MIME type of the asset */type: string;}>;
path 到 { type } 对象的映射。
tsredirects: Map<string,{status: number;location: string;}>;
预渲染期间遇到的重定向的映射。
tspaths: string[];
预渲染路径的数组(没有尾部斜杠,无论 trailingSlash 配置如何)
RequestOptions永久链接
tsinterface RequestOptions {…}
tsgetClientAddress(): string;
tsplatform?: App.Platform;
RouteSegment永久链接
tsinterface RouteSegment {…}
tscontent: string;
tsdynamic: boolean;
tsrest: boolean;
TrailingSlash永久链接
tstype TrailingSlash = 'never' | 'always' | 'ignore';
生成的类型永久链接
RequestHandler 和 Load 类型都接受一个 Params 参数,允许你对 params 对象进行类型化。例如,此端点期望 foo、bar 和 baz 参数
ts/** @type {import('@sveltejs/kit').RequestHandler<{foo: string;bar: string;baz: string}>} */export async functionA function whose declared type is neither 'void' nor 'any' must return a value.2355A function whose declared type is neither 'void' nor 'any' must return a value.({ GET params }) {// ...}
tsexport constType '({ params }: RequestEvent<{ foo: string; bar: string; baz: string; }, string | null>) => Promise<void>' is not assignable to type 'RequestHandler<{ foo: string; bar: string; baz: string; }, string | null>'. Type 'Promise<void>' is not assignable to type 'MaybePromise<Response>'. Type 'Promise<void>' is not assignable to type 'Promise<Response>'. Type 'void' is not assignable to type 'Response'.2322Type '({ params }: RequestEvent<{ foo: string; bar: string; baz: string; }, string | null>) => Promise<void>' is not assignable to type 'RequestHandler<{ foo: string; bar: string; baz: string; }, string | null>'. Type 'Promise<void>' is not assignable to type 'MaybePromise<Response>'. Type 'Promise<void>' is not assignable to type 'Promise<Response>'. Type 'void' is not assignable to type 'Response'.: import('@sveltejs/kit'). GET RequestHandler <{foo : string;bar : string;baz : string;}> = async ({params }) => {// ...};
不用说,这写起来很麻烦,而且可移植性较差(如果你将 [foo] 目录重命名为 [qux],则类型将不再反映现实)。
为了解决此问题,SvelteKit 为您的每个端点和页面生成 .d.ts 文件
tsimport type * asKit from '@sveltejs/kit';typeRouteParams = {foo : string;bar : string;baz : string;}export typePageServerLoad =Kit .ServerLoad <RouteParams >;export typePageLoad =Kit .Load <RouteParams >;
由于 TypeScript 配置中的 rootDirs 选项,这些文件可以作为兄弟文件导入到您的端点和页面中
ts/** @type {import('./$types').PageServerLoad} */export async functionGET ({params }) {// ...}
tsimport type {PageServerLoad } from './$types';export constGET :PageServerLoad = async ({params }) => {// ...};
ts/** @type {import('./$types').PageLoad} */export async functionload ({params ,fetch }) {// ...}
tsimport type {PageLoad } from './$types';export constload :PageLoad = async ({params ,fetch }) => {// ...};
为此,您自己的
tsconfig.json或jsconfig.json应从生成的.svelte-kit/tsconfig.json扩展(其中.svelte-kit是您的outDir)
{ "extends": "./.svelte-kit/tsconfig.json" }
默认 tsconfig.json永久链接
生成的 .svelte-kit/tsconfig.json 文件包含多种选项。有些是根据您的项目配置以编程方式生成的,通常不应该在没有充分理由的情况下覆盖
ts{"compilerOptions": {"baseUrl": "..","paths": {"$lib": "src/lib","$lib/*": "src/lib/*"},"rootDirs": ["..", "./types"]},"include": ["../src/**/*.js", "../src/**/*.ts", "../src/**/*.svelte"],"exclude": ["../node_modules/**", "./**"]}
其他选项对于 SvelteKit 正常工作是必需的,除非您知道自己在做什么,否则也应保持不变
ts{"compilerOptions": {// this ensures that types are explicitly// imported with `import type`, which is// necessary as svelte-preprocess cannot// otherwise compile components correctly"importsNotUsedAsValues": "error",// Vite compiles one TypeScript module// at a time, rather than compiling// the entire module graph"isolatedModules": true,// TypeScript cannot 'see' when you// use an imported value in your// markup, so we need this"preserveValueImports": true,// This ensures both `vite build`// and `svelte-package` work correctly"lib": ["esnext", "DOM", "DOM.Iterable"],"moduleResolution": "node","module": "esnext","target": "esnext"}}
App永久链接
Error永久链接
定义预期和意外错误的常见形状。使用 error 函数抛出预期错误。意外错误由 handleError 钩子处理,该钩子应返回此形状。
tsinterface Error {…}
tsmessage: string;
Locals永久链接
定义 event.locals 的接口,可以在 钩子(handle 和 handleError)、仅限服务器的 load 函数和 +server.js 文件中访问它。
tsinterface Locals {}
PageData永久链接
定义 $page.data store 的常见形状,即在所有页面之间共享的数据。./$types 中的 Load 和 ServerLoad 函数将相应地缩小。对仅存在于特定页面上的数据使用可选属性。不要添加索引签名([key: string]: any)。
tsinterface PageData {}
PageState永久链接
$page.state 对象的形状,可以使用 $app/navigation 中的 pushState 和 replaceState 函数对其进行操作。
tsinterface PageState {}
平台永久链接
如果你的适配器通过 event.platform 提供特定于平台的上下文,你可以在这里指定它。
tsinterface Platform {}