我目前正在学习 SvelteKit,遇到了一些我不明白其语法的代码。
在+page.server.ts
中我不明白这个语法:
/** @type {import('./$types').PageServerLoad} */
在我未经训练的眼睛看来,这看起来像是刚刚被注释掉了,但 /** */
正在做一些确保它工作的事情。不知道。
最佳答案
每当您运行 dev 或 build 命令时,SvelteKit 都会生成一个 .svelte-kit
目录。此目录中包含许多为预渲染生成的文件以及类型定义。这些定义为您提供了支持 TypeScript 的文本编辑器中的自动完成和错误检查功能。
$types
是相应 $types.d.ts
type declaration file 的别名。在 .svelte-kit/types/src/routes/...
文件夹中。
可以导入这些类型,以便您的文本编辑器可以理解加载函数的类型。可以通过两种方式导入类型:
A. JSDoc 注释 + TypeScript 特定的导入类型
假设文件路径 src/routes/blog/[slug]
中有一个 page.server.ts
文件。这为您提供了对 params 对象的自动完成和类型检查,如下所示。
/** @type {import('./$types').PageServerLoad} */
export const load = async ({ params }) => {
params.slug // autocompletes, no error
params.snail
// ^^^^^ error: Property 'snail' does not
// exist on type 'RouteParams'
}
这看起来像常规的 JSDoc 注释,但 import()
函数是 TypeScript 特定的。有关更多信息,请参阅 TypeScript Handbook (感谢 jonrsharpe 提及该链接)。
JSDoc 评论可能会受到限制。好像支持注释modules .
B. TypeScript 类型注释
如果您使用 TypeScript,您还可以使用其他语法:
import type { PageServerLoad } from './$types';
export const load: PageServerLoad = async ({ params }) => {
// ...
}
进一步阅读(关于 TypeScript 如何集成到文本编辑器/IDE 中):
关于typescript - @type import ('./$types' ) Comment 语法在 SvelteKit 中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75914611/