Zodでカスタムバリデーション作るのと値を変換する方法分かったのでまとめた。
Zodめちゃ便利だけど公式のドキュメントがなくて細かいところがなかなか分かりずらい。
カスタムのバリデーションとか値変換について調べてもissueにも良い回答が上がってなかった気がする。。。
import * as z from 'zod'
const parser = z.object({
id: z
.string()
// カスタムバリデーション
.refine((v) => {
return !isNaN(Number(v))
}, 'error message')
// 値を変換
.transform((v) => {
return Number(v)
}),
})
const parsedValue = parser.parse({
id: "12"
})
console.log(parsedValue.id) // Type is number
// throw Error
const parsedValue = parser.parse({
id: "abcd12"
})