🤖

TypeScriptでZodスキーマから推論される型を生成する

2024/08/10に公開

Zodは、スキーマを定義してランタイムチェックを行うだけでなく、そのスキーマから型を推論して、静的な型チェックに利用することも可能です。この記事では、Zodを使ってスキーマから型を推論する方法を紹介します。

Zodでスキーマを定義する

まず、Zodを使ってスキーマを定義します。ここでは、コンタクト情報を表すスキーマを例にします。このスキーマでは、personオブジェクトの中にfirstNamelastNameという文字列のプロパティがあり、emailはメールアドレス形式の文字列であることを定義しています。

import {z} from 'zod'

const contactSchema = z.object({
  person: z.object({
    firstName: z.string(),
    lastName: z.string()
  }),
  email: z.string().email(),
})

このように、Zodを使ってオブジェクトのスキーマを簡単に定義することができます。

Zodでスキーマから型を推論する

次に、Zodのz.infer()関数を使って、定義したスキーマから型を推論し、その型を関数の引数として利用します。

const createContact = (data: z.infer<typeof contactSchema>) => {
  // ...
}

このdataの型を調べてみると、contactSchemaに基づいて自動的に生成された型が得られます。具体的には、以下のような型になります。

/* data: {
 *    person: {
 *        firstName: string;
 *        lastName: string;
 *    };
 *    email: string;
 * }
 */

これにより、createContact関数に渡されるデータがスキーマに基づいて正しい型を持っていることを保証できます。

推論された型を再利用する

スキーマから推論された型が複雑になる場合、その型を別途定義し、再利用できるようにすることができます。これにより、コードがより整理され、他のモジュールでも型を利用することが容易になります。

export type Contact = z.infer<typeof contactSchema>

const createContact = (data: Contact) => {
  // ...
}

Contactという型をエクスポートすれば、他のファイルやモジュールでもこの型を使用できます。これにより、コードの可読性と再利用性が向上します。

Zodを使うことで、スキーマ定義と型の推論が一体化し、型安全な開発が可能になります。プロジェクトの規模が大きくなるほど、このようなツールが役立つ場面が増えていくでしょう。

フリーランスエンジニア必見!

最後に、フリーランスエンジニアの方にご案内です。
あなたに今だけご紹介できる”エンド直”・”高単価”の案件があります!

気になる方は公式ラインの追加をお願いします👇
https://s.lmes.jp/landing-qr/2005758918-ADDegZkx?uLand=tau44P

Discussion