如何在SvelteKit中扩展App.Locals接口并在服务端路由生效?
解决SvelteKit中扩展
App.Locals类型的问题 当你在SvelteKit的服务端hooks中尝试给event.locals添加自定义属性(比如user)时:
event.locals.user = await getUserInformation(event.cookies.get('sessionid'));
TypeScript会抛出错误:
Property 'user' does not exist on type 'Locals'
这是因为默认的App.Locals接口是空的,属于正常的类型检查提示。要解决这个问题,只需扩展App.Locals接口,让TypeScript识别自定义属性:
- 找到项目
src目录下的app.d.ts文件(如果没有就新建一个) - 在文件中扩展
App.Locals接口,添加你需要的属性,比如user和session:
declare namespace App { interface Locals { user: { id: string; name: string; /* 这里定义user的具体类型 */ }; session?: { id: string; expiresAt: Date }; } }
- 保存文件后,TypeScript会自动识别这些类型定义,你在服务端hooks、服务端路由(比如
+server.ts、+page.server.ts)中使用event.locals.user或event.locals.session时,就不会再出现类型错误,也不需要手动做类型转换。
这样定义后,所有服务端上下文里的locals对象都会自动拥有你声明的属性类型,无需重复定义。
内容的提问来源于stack exchange,提问作者CordlessWool
相关产品推荐
相关产品推荐

