zod の refine を使っていたのですが、path の使い方を全く理解できておらず、小一時間ほどハマってしまったことがあったので、備忘録として残しておきます。
zod を使って、バリデーションロジックを書いていました。 バリデーションで複数フィールドを参照する必要があったため、refine を使っていました。
サンプルコードを以下に示します。
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.comzod の github にある path の説明は、appended to error path と書いています。
-
0
読み込み中...
タグ「フロントエンド」の記事
AI にコードを書かせた後、余計なコードを見つけて消す作業があります。 不毛なことなので、それらの作業を減らすためのお作法を紹介します。 未使用コードを消す 以下でも書きましたが、未使用コードの検査に knip を使うことが多いです。 ht
最近、iframeを使っています。 クライアントサイドで埋め込む想定で、iframeを使おうとしています。 色々と苦労したことがあったので、書いて残しておこうと思います。 レスポンスヘッダー 前提として、ウェブアプリケーションをプロダクショ
紙を積んだイラストをSVGで書こうとしていました。 (当たり前ですが)図形を表現するためには数学の知識が必要で、学生の頃の記憶を思い出したので疲れました。 所感について、諸々書こうと思います。 成果物 実際に完成したのは、以下の画像ができま
2026年02月17日
タグ「クローリング」の記事
WikiWikiWeb というコンセプトが好きで、そのコンセプトが含まれている Obsidian や Scrapbox が好きです。Obsidian には、obsidian-gitという Git 連携のプラグインがあります。こちらには、デスクトップだけでなく、モバイルからでも Git Commit できるようになりました。
ERNIE-ViLG というのが、"二次元キャラ" に強いという記事を目にしました。実際に使ってみようと、次のページで試したんですが、レスポンスがイマイチでした。そこで、次の記事を参考にして、ERNIE-ViLG を Google Colaboratory で動かすようにしました。
タグ「JavaScript」の記事
GraphQL クライアントを使っていると、データを取得後に変換処理がしたくなります。GraphQL クライアントの urql で、データ変換するのに、exchanges が使えそうだったので、それを共有します。