Zodの検証の前後に変換する関数の使い分け
検証前に変換する
検証のために変換する感じ
zod.coerce()
unknown値をprimitive型に変換できるか検証して、後続に渡す
code:ts
const schema = z.coerce.string();
schema.parse("tuna"); // => "tuna"
schema.parse(12); // => "12"
schema.parse(true); // => "true"
限定的なzod.preprocess()とも言える
ただし、zod.preprocess()と違って、自然に後続できる利点がある
code:ts
const schema = z.coerce.string().max(10)...
const schema = z.preprocess(String, z.string().max(10)...)
zod.preprocess()
unknown値を変換して、後続に渡す
zod.coerce()で賄いきれない変換をしたい時に使えば良さそう
検証前に任意の変換ができる
z.coerce.string()でできない例なら、例えば、全角文字列を半角文字列に変換してから、後続の検証を行う、とか
検証後に変換する
検証後に内部にわたすために変換する感じ
zod.transform()
z.string()などのprimitive値で検証後に、変換する
zod.pipe()を使うことで、変換後に更に検証できるようになった