能否通过TypeScript类型检查强制Svelte页面端点返回必填Props?
两个问题的解决方法如下:
强制端点返回符合要求的body
你现在的写法校验不生效,是因为默认RequestHandler类型里返回结构的body字段是可选的,没开TS严格模式的时候,空对象不会被拦截。
要做到强制校验:
- 最一劳永逸的是在tsconfig.json里开启
strict: true,开了之后你原来的写法只要漏了body、或者body里缺bar字段,TS直接报错。 - 不想开全量严格检查的话,用
satisfies做约束就行,不会丢失类型推导,也不会放过类型错误:
// routes/foo.ts import type { RequestHandler } from '@sveltejs/kit'; export type Props = { bar: string }; export const get = (async () => { return { // 这里漏写body、或者body里缺bar、bar类型不对,TS都会报错 body: { bar: '' } } }) satisfies RequestHandler<{}, Props>;
别用as做类型断言,会直接绕过校验。
让组件props和Props接口严格对齐
Svelte的TS模式原生支持$$Props内置接口,你在组件脚本里声明这个接口继承你写的Props,TS会自动检查所有导出的props是否符合类型要求,不用重复写一遍类型:
<!-- routes/foo.svelte --> <script lang="ts"> import type { Props } from './foo'; // 加这行就行:props缺字段、类型错、多了不该有的字段,全都会报错 interface $$Props extends Props {} export let bar: string; </script> <!-- 页面其余逻辑 -->
如果你用的是新版SvelteKit(用+page.ts/+page.svelte命名路由的版本),这套校验框架已经内置了,只要在+page.ts里定义PageData类型,页面组件会自动拿到对应props类型,不用手动做关联。
内容的提问来源于stack exchange,提问作者w.brian
相关产品推荐
相关产品推荐

