
こんにちは。よっしーです(^^)
今日は、SvelteKitのリファレンスについて解説して います。
背景
SvelteKitのリファレンスについて調査する機会がありましたので、その時の内容を備忘として記事に残しました。
Types
Generated types
RequestHandler
とLoad
の型はどちらもParams
引数を受け取り、params
オブジェクトの型を定義できます:
src/routes/[foo]/[bar]/[baz]/+server
import type { RequestHandler } from '@sveltejs/kit';
export const GET: RequestHandler<{
foo: string;
bar: string;
baz: string
}> = async ({ params }) => {
// ...
};
これは記述が面倒で、移植性も低いです([foo]
ディレクトリを[qux]
に変更すると、型が実際の構造と一致しなくなります)。
この問題を解決するために、SvelteKitは各エンドポイントとページに.d.ts
ファイルを自動生成します:
.svelte-kit/types/src/routes/[foo]/[bar]/[baz]/$types.d
import type * as Kit from '@sveltejs/kit';
type RouteParams = {
foo: string;
bar: string;
baz: string;
};
export type RequestHandler = Kit.RequestHandler<RouteParams>;
export type PageLoad = Kit.Load<RouteParams>;
TypeScriptのrootDirs
設定により、これらのファイルは相対パスでインポートできます:
src/routes/[foo]/[bar]/[baz]/+server
import type { RequestHandler } from './$types';
export const GET: RequestHandler = async ({ params }) => {
// ...
};
src/routes/[foo]/[bar]/[baz]/+page
import type { PageLoad } from './$types';
export const load: PageLoad = async ({ params, fetch }) => {
// ...
};
loadファンクションの戻り値の型は$types
モジュールからPageData
およびLayoutData
として利用でき、すべてのActions
の戻り値の合併型はActionData
として利用できます。
バージョン2.16.0以降(現在の方法)
バージョン2.16.0からは、追加のヘルパー型が提供されています:
PageProps
:data: PageData
とform: ActionData
(アクションがある場合)を定義LayoutProps
:data: LayoutData
とchildren: Snippet
を定義
src/routes/+page
<script lang="ts">
import type { PageProps } from './$types';
let { data, form }: PageProps = $props();
</script>
レガシーモード(バージョン2.16.0以前)
バージョン2.16.0以前($props()使用時)
<script lang="ts">
import type { PageData, ActionData } from './$types';
let { data, form }: { data: PageData, form: ActionData } = $props();
</script>
Svelte 4での使用法
<script lang="ts">
import type { PageData, ActionData } from './$types';
export let data: PageData;
export let form: ActionData;
</script>
これらの型システムを機能させるには、自分のtsconfig.json
またはjsconfig.json
が生成された.svelte-kit/tsconfig.json
を拡張している必要があります:
{ "extends": "./.svelte-kit/tsconfig.json" }
解説
SvelteKitの型システムは、開発者体験を向上させるために以下の特徴を提供しています:
- 自動型生成:ルート構造に基づいてパラメータ型を自動生成することで、手動での型定義が不要に
- 型の一貫性:バックエンド(load関数やactions)とフロントエンド(コンポーネント)間での型の一貫性を確保
- リファクタリングの容易さ:ディレクトリ名を変更しても型定義が自動的に更新されるため、メンテナンスが容易
- コード補完:エディタでのコード補完やエラーチェックがより正確に
- 進化するAPI:バージョン2.16.0以降では、
PageProps
やLayoutProps
などの新しいヘルパー型が追加され、より簡潔な記述が可能に
この型システムにより、TypeScriptを活用したSvelteKit開発がより安全かつ効率的になります。
おわりに
今日は、 SvelteKitのリファレンスについて解説しました。

何か質問や相談があれば、コメントをお願いします。また、エンジニア案件の相談にも随時対応していますので、お気軽にお問い合わせください。
それでは、また明日お会いしましょう(^^)
コメント