ホーム自己紹介ブログ
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

-

コメント

0

読み込み中...

シェアする

フォローする

購読する

次のページ

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

前のページ

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

関連する記事

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

AIの書いたコードの手直しを減らすお作法

AI にコードを書かせた後、余計なコードを見つけて消す作業があります。 不毛なことなので、それらの作業を減らすためのお作法を紹介します。 未使用コードを消す 以下でも書きましたが、未使用コードの検査に knip を使うことが多いです。 ht

2026年02月25日

AI
フロントエンド
iframeの難しさ

最近、iframeを使っています。 クライアントサイドで埋め込む想定で、iframeを使おうとしています。 色々と苦労したことがあったので、書いて残しておこうと思います。 レスポンスヘッダー 前提として、ウェブアプリケーションをプロダクショ

2026年02月18日

フロントエンド
ブラウザ
SVGを書くと数学の知識が必要だった

紙を積んだイラストをSVGで書こうとしていました。 (当たり前ですが)図形を表現するためには数学の知識が必要で、学生の頃の記憶を思い出したので疲れました。 所感について、諸々書こうと思います。 成果物 実際に完成したのは、以下の画像ができま

2026年02月17日

フロントエンド

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

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
← ブログ一覧へ