zodでバリデーションルールを他の値によって変更したい場合のスニペット

zodでバリデーションルールを項目によって変更したいときのスニペット。
Snippet
const schema_1 = z.object({ outputType: z.literal('hidden'), consoleOutput: z.string(), uploadedImageURL: z.string(), }) const schema_2 = z.object({ outputType: z.literal('console'), consoleOutput: z .string({ invalid_type_error: 'コンソールのアウトプットは文字列のみ入力できます。', required_error: 'コンソールのアウトプットを入力してください。', }) .min(1, 'コンソールのアウトプットを入力してください。') .max(500, 'コンソールのアウトプットは500文字まで入力できます。'), uploadedImageURL: z.string(), }) const schema_3 = z.object({ outputType: z.literal('image'), consoleOutput: z.string(), uploadedImageURL: z .string({ invalid_type_error: '画像URLは文字列のみ入力できます。', required_error: '画像は必須です。', }) .min(1, '画像は必須です。') .url('画像URLのURLの形式が正しくありません。'), }) // discriminatedUnionの第一引数に条件分岐のもとになるキーを指定する const outputSchema = z.discriminatedUnion('outputType', [ schema_1, schema_2, schema_3, ])