typescript - @type import ('./$types' ) Comment 语法在 SvelteKit 中如何工作?

标签 typescript sveltekit jsdoc

我目前正在学习 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/... 文件夹中。

Shows the files and folders in the .svelte-kit directory

可以导入这些类型,以便您的文本编辑器可以理解加载函数的类型。可以通过两种方式导入类型:

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/

相关文章:

unit-testing - 如何为 vscode 扩展做 Coverage 导出

SvelteKit 加载每个页面请求的图标

javascript - 处理 Svelte 组件 Prop 的最佳方式

javascript - 你如何用 Javascript 为 TypeScript Compiler 编写 JSDoc?

javascript - 从 Angular2 中的 JSON 文件获取特定列

php - 使用 Laravel 5.4 作为后端的 Ionic 2 登录

TypeScript 数组泛型丢失顺序

source-maps - sourcempas 位于哪里以及如何在 Sveltekit 中生成它们?

javascript - 在 intellij 中为 javascript 核心添加 jsdoc

javascript - 使用 JSDoc 注释通用 ES6 类