shikishikichangchangS
tRPC15mo ago
2 replies
shikishikichangchang

Override output schema for certain mutations

Is it possible to overrider output schema's type for certain mutations?

Currently I have a base procedure that has an outputschema as such:

import { z } from "zod";

const successSchema = z.object({
    status: z.literal("success"),
    data: z.any(),
});

const errorSchema = z.object({
    status: z.literal("error"),
    errorMessage: z.string(),
});

export const outputSchema = z.discriminatedUnion("status", [successSchema, errorSchema]);
export type Output = z.infer<typeof outputSchema>;


As you can see, data is z.any(). For most mutations I don't need to return the data so that's not a problem. However, I want to return the data with the correct type for some.

The output must have either z.literal("success") or z.literal("error").

I tried to add an extra '.output' but it seems like trpc only allows for one (no chaining to override).
Was this page helpful?