スキーマからの型推論
Zodスキーマから静的型を直接導出します。
「スキーマからの型推論」はCoddyKit上の無料TypeScript Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはTypeScript Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 TypeScript Academyコースには全4レッスンが含まれています。
スキーマは型情報を持つ
Zodのスキーマは、自身が検証するTypeScriptの型を把握しています。z.inferでその型を取り出せるため、形状を一度だけ記述すれば済みます。
import { z } from "zod";
const userSchema = z.object({ name: z.string(), age: z.number() });
type User = z.infer<typeof userSchema>;
// User is { name: string; age: number }z.inferユーティリティ
z.infer<typeof schema>は、そのスキーマが検証する静的な型を生成します。typeofに注目してください。渡すのはスキーマの値です。
import { z } from "zod";
const tagSchema = z.array(z.string());
type Tags = z.infer<typeof tagSchema>; // string[]単一の信頼できる情報源
推論を使わない場合、型とスキーマを別々に管理する必要があり、両者にずれが生じる可能性があります。z.inferを使えば、両者を完全に同期できます。
import { z } from "zod";
const schema = z.object({ id: z.number(), email: z.string() });
type Account = z.infer<typeof schema>;
// Change the schema, the type updates automatically.ネストされた型を推論する
推論はネストされたオブジェクトや配列にも対応しており、1つのスキーマから完全にネストされたTypeScriptの型を生成します。
import { z } from "zod";
const postSchema = z.object({
title: z.string(),
author: z.object({ name: z.string() }),
tags: z.array(z.string())
});
type Post = z.infer<typeof postSchema>;
// Post.author.name is string推論された型を使う
推論された型は、手書きの型と同じ場所で使えます。関数の引数、変数、戻り値の型などに利用できます。
import { z } from "zod";
const userSchema = z.object({ name: z.string(), age: z.number() });
type User = z.infer<typeof userSchema>;
function greet(u: User): string {
return "Hi " + u.name;
}parseは推論された型を返す
schema.parseは、推論された型としてすでに型付けされた値を返すため、その後のコードも完全に型付けされます。
import { z } from "zod";
const userSchema = z.object({ name: z.string(), age: z.number() });
type User = z.infer<typeof userSchema>;
const raw: unknown = { name: "Ada", age: 36 };
const user: User = userSchema.parse(raw); // typed and validated型におけるoptionalとnullable
スキーマの修飾子は推論された型にも反映されます。.optional()を付けたフィールドは、TypeScriptでもオプショナルになります。
import { z } from "zod";
const schema = z.object({
name: z.string(),
nickname: z.string().optional()
});
type P = z.infer<typeof schema>;
// P is { name: string; nickname?: string }オブジェクトの配列から推論する
z.arrayとz.objectを組み合わせると、推論された型はオブジェクト型の配列になります。
import { z } from "zod";
const usersSchema = z.array(z.object({ id: z.number() }));
type Users = z.infer<typeof usersSchema>;
// Users is { id: number }[]typeofが必要な理由
スキーマは値なので、z.inferに渡す前にtypeof schemaを使ってその型を参照します。
import { z } from "zod";
const s = z.string();
type S = z.infer<typeof s>; // string
// z.infer<s> would be wrong: s is a value, not a type.モジュール境界を越えた推論
スキーマと推論された型の両方をエクスポートすると、他のモジュールでも同じ形状を一貫して検証し、利用できます。
import { z } from "zod";
export const userSchema = z.object({ name: z.string() });
export type User = z.infer<typeof userSchema>;
// Consumers import both the runtime schema and the type.1つの定義で2つの世界に対応する
スキーマは実行時検証を担い、z.inferはコンパイル時の型付けを担います。1つの宣言で両方を支えられるため、重複をなくせます。
import { z } from "zod";
const configSchema = z.object({ port: z.number(), host: z.string() });
type Config = z.infer<typeof configSchema>;
// Validate at runtime, type at compile time, no drift.確認問題:型の推論
スキーマからの型の推論について理解度を確認します。
まとめ:スキーマから型を推論する
z.infer<typeof schema>でZodスキーマからTypeScriptの型を導出できることを学びました。これにより、ネスト、オプショナル、配列の形状を含め、検証と型付けにおける単一の信頼できる情報源を得られます。
import { z } from "zod";
const userSchema = z.object({ name: z.string(), age: z.number() });
type User = z.infer<typeof userSchema>;
// User stays in sync with the schema automatically.よくある質問
「スキーマからの型推論」レッスンは無料ですか?
はい。「スキーマからの型推論」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、TypeScript Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 TypeScript Academyコースには全4レッスンが含まれています。
「スキーマからの型推論」で何を学びますか?
Zodスキーマから静的型を直接導出します。 ブラウザで直接実行するハンズオンコードでTypeScript Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
TypeScript Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのTypeScript Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「スキーマからの型推論」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このTypeScript Academyレッスンでコードを書いて実行できますか?
はい。すべてのTypeScript Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Zodスキーマの基礎
- スキーマからの型推論
- parseとsafeParse
- スキーマの合成と改良