You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SvelteKit中@type import('./$types')注释语法的工作原理

解释SvelteKit中+page.server.ts里的JSDoc类型注释

那段/** @type {import('./$types').PageServerLoad} */不是普通注释,是JSDoc类型断言,专门给TypeScript做类型校验用的,核心作用是给后续的load函数绑定SvelteKit自动生成的类型规范。

具体拆解:

  • ./$types是SvelteKit自动生成的文件,里面包含当前页面专属的类型定义——比如路由参数、load函数的输入输出类型等,PageServerLoad就是其中一个核心类型,它明确了load函数的参数(比如params、fetch、cookies)结构,以及返回值的类型要求。
  • @type是JSDoc的类型标记,告诉TypeScript:接下来的函数/变量必须符合大括号里指定的类型。在SvelteKit里,它通常紧跟在export async function load()前面,这样TS会自动校验你写的load函数:比如有没有误用event里的属性,返回的数据结构是不是符合页面组件的预期,避免拼写错误或者类型不匹配的问题。
  • 你也可以用TS的常规导入写法替代:import type { PageServerLoad } from './$types',然后给load函数加类型注解export async function load(event: PageServerLoad['Input']): Promise<PageServerLoad['Output']> { ... },效果完全一致——JSDoc写法只是更简洁,不用手动解构输入输出类型。

举个实际使用的例子:

/** @type {import('./$types').PageServerLoad} */
export async function load({ params, fetch }) {
  // TypeScript会自动提示params的属性(比如如果路由是/post/[slug],params就有slug字段)
  const res = await fetch(`/api/posts/${params.slug}`);
  // 返回的数据会被TS校验,确保符合页面组件期望的类型
  return { post: await res.json() };
}

工作机制:

TypeScript编译器会主动解析这种JSDoc注释,把它当作正式的类型声明来处理,相当于给load函数套上了类型约束。SvelteKit自动生成的$types文件会根据你的路由、页面配置动态更新,所以这个注释能让你的代码始终和当前页面的类型要求保持同步。

内容的提问来源于stack exchange,提问作者David Shackelford

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 21:15:08