SvelteKit中不同路径导入RequestHandler类型的区别是什么
SvelteKit 两种
RequestHandler导入方式的差异 两种导入拿到的类型作用范围完全不同,实际开发中类型提示的精准度有明显区别:
- 从
@sveltejs/kit导入的是框架原生的通用基础类型
这是SvelteKit对外暴露的无上下文泛用定义,不会感知你当前写的是哪个路由的处理逻辑,默认的参数、返回值类型都是最宽泛的约束,比如动态路由params默认是通用的Record<string, string>,不会识别你当前路由到底有[id]还是[slug]这类动态段,用的时候通常需要手动传入泛型参数才能拿到精准校验。 - 从
./__types导入的是当前路由的自动生成专属类型
这个__types目录是SvelteKit根据你当前路由目录的文件结构、动态路由配置、父级load返回数据等上下文,自动生成的绑定好上下文的类型文件。从这里导入的RequestHandler已经提前把当前路由的动态参数类型、允许的返回值格式、父层传递的数据类型都预置好了,直接用就能拿到最精准的TS提示:比如你在/user/[userId]/+server.ts里写逻辑,event.params.userId会被自动识别为存在的字符串字段,写错参数名、返回不符合约定的响应都会立刻报类型错误,不需要自己手动传泛型。
实际开发建议:写单路由对应的
+server.ts处理逻辑时,优先用./__types里自动生成的版本,省掉手动写泛型的麻烦,类型校验也更严;如果是写跨多个路由复用的通用请求处理工具函数,再用@sveltejs/kit导出的基础版本,根据使用场景手动传入对应的泛型约束即可。
内容的提问来源于stack exchange,提问作者Grant Pitt
相关产品推荐
相关产品推荐

