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

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

-

読者になる

|

シェアする

|

silverbirders

silverbirder

Webソフトウェアエンジニア

ブログを応援する

この記事がよかったら、お布施という形で応援してもらえるとうれしいです。

おふせぼたん

※ ログイン不要で投稿できます。

※ 同じブラウザから投稿を削除できます。

0

読み込み中...

次の記事へ前の記事へ

関連する記事

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

Webフロントエンドのコードレビューメモ2

また、以下の記事の続きを書こうと思います。 https://silverbirder.github.io/blog/contents/20260312/ ビジネスロジック アプリケーションのビジネスロジックに関することについて書きます。 複

2026年03月18日

フロントエンド
Webフロントエンドのコードレビューメモ

Webフロントエンドのコードレビューをしているときに考えていることについて書きます。 毎日1記事投稿、1記事30分という制約を課していますので、本記事は完璧ではありません。(言い訳) また希望的な考えもあるので、実践していないものもあります

2026年03月12日

フロントエンド
AIの書いたコードの手直しを減らすお作法

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

2026年02月25日

AI
フロントエンド

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

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