error handling
Hi, what is best method to handle errors like incorrect email or password etc, cuz when im using throw new trpcerror i have error info in left down corner


tryToTRPCClientErrorimport { toast } from "sonner"
type TryFnHandler = () => any | Promise<any>
interface TryFnOptions<T extends TryFnHandler> {
onSuccess?: (result: Awaited<ReturnType<T>>) => void
onError?: (error: unknown) => void
successMessage?: string | ((result: Awaited<ReturnType<T>>) => string)
errorMessage?: string
}
export async function tryTo<T extends TryFnHandler>(
handler: T,
opts: TryFnOptions<T> = {},
) {
try {
const result = await handler()
if (opts.onSuccess) {
opts.onSuccess(result)
}
if (opts.successMessage) {
if (typeof opts.successMessage === "function") {
toast.success(opts.successMessage(result))
} else {
toast.success(opts.successMessage)
}
}
} catch (error) {
if (opts.onError) {
opts.onError(error)
}
if (opts.errorMessage) {
toast.error(opts.errorMessage)
} else {
const message =
error instanceof Error
? error.message
: "Oh no, something went wrong!"
toast.error(message)
}
}
}const mutation = trpc.yourHandler.useMutation()
async function doMutation {
await tryTo(async () => {
await mutation.mutateAsync()
})
}if (error instanceof TRPCClientError) {
const message = // get message from error
}