ホーム自己紹介ブログ
NO.99
DATE2023. 01. 07

zodのrefineにあるpathにハマった

zod の refine を使っていたのですが、path の使い方を全く理解できておらず、小一時間ほどハマってしまったことがあったので、備忘録として残しておきます。

背景

zod を使って、バリデーションロジックを書いていました。 バリデーションで複数フィールドを参照する必要があったため、refine を使っていました。

GitHub - colinhacks/zod: TypeScript-first schema validation with static type inference
TypeScript-first schema validation with static type inference - colinhacks/zod
github.com

path

サンプルコードを以下に示します。

import { z } from "zod";
 
const schema = z.object({
  a: z
    .object({
      first: z.string(),
    })
    .refine(({ first }) => first === "first", {
      path: ["b"],
    }),
});

a というオブジェクトに refine を定義しました。refine の第 2 引数の path に ['b'] を定義しました。

schema のテストをしてみます。

import test from "tape";
 
test("invalid", (t) => {
  // Act
  const data = schema.safeParse({
    a: {
      first: "BUG",
    },
  });
 
  // Assert
  t.deepEqual(data.error.issues[0].path, ["a", "b"]);
  t.end();
});

エラー(issue)の path は、['a', 'b'] になります。めちゃくちゃ当たり前なんですが、以上です。(笑)

stackblitz にも残しておきました。

stackblitz.com

zod の github にある path の説明は、appended to error path と書いています。

フロントエンド
クローリング
JavaScript

-

シェアする

フォローする

次のページ

Webフロントエンドにおける網羅的テストパターンガイド

前のページ

GitHub ActionsとPull Requestを活用した、同期の自動化

関連する記事

タグ「フロントエンド」の記事

ヒューマンインターフェース ガイドライン という言葉を知りました。

最近、ヒューマンインターフェース ガイドライン(HIG)という言葉を知りました。 「ヒューマンインターフェイスガイドライン」には、どのAppleプラットフォームでも優れた体験を設計できるようにするためのガイドとベストプラクティスが含まれてい

2026-01-24

フロントエンド
AIの利用上限に達した時にすることを残しておく

主にWeb関連の個人開発をしている際に心がけていることを書きます。 月末に近づくにつれ、AIの利用上限に達してしまうことがあります。 その状況になった時、以下のいずれかの選択肢が私の中では残っています。 課金して利用上限を増やす 無料モデル

2026-01-22

フロントエンド
AI
CSSで頑張らなくても、SVGで楽にできるときもある

個人サイトをリニューアルをしています。 ノート風のデザインを目指して、スタイルを調整していました。 ノートの見た目は、現実にあるノートを再現しようとCSSを書いていました。 現在、以下の画像のようなノートになっています。 ノート風デザインの

2026-01-20

フロントエンド

タグ「クローリング」の記事

ObsidianでiPhoneからGit Commitする

WikiWikiWeb というコンセプトが好きで、そのコンセプトが含まれている Obsidian や Scrapbox が好きです。Obsidian には、obsidian-gitという Git 連携のプラグインがあります。こちらには、デスクトップだけでなく、モバイルからでも Git Commit できるようになりました。

2022-10-18

開発ツール
クローリング
クローリングをシュッとやるのに、Crawleeが便利だった

スクレイピングしたいときって、あると思います。Crawlee という OSS が便利だったので、共有します。

2022-09-14

クローリング
ERNIE-ViLG を Google Colaboratory で動かしてみた

ERNIE-ViLG というのが、"二次元キャラ" に強いという記事を目にしました。実際に使ってみようと、次のページで試したんですが、レスポンスがイマイチでした。そこで、次の記事を参考にして、ERNIE-ViLG を Google Colaboratory で動かすようにしました。

2022-09-03

AI
Google
クローリング

タグ「JavaScript」の記事

urqlでデータ変換(transform)してみた

GraphQL クライアントを使っていると、データを取得後に変換処理がしたくなります。GraphQL クライアントの urql で、データ変換するのに、exchanges が使えそうだったので、それを共有します。

2022-08-10

バックエンド
フロントエンド
JavaScript
← ブログ一覧へ