app/javascript/react/utils/getErrorMessage.ts
// credits to KCDodds https://kentcdodds.com/blog/get-a-catch-block-error-message-with-typescript
type ErrorWithMessage = {
message: string;
};
const isErrorWithMessage = (error: unknown): error is ErrorWithMessage =>
typeof error === "object" &&
error !== null &&
"message" in error &&
typeof (error as Record<string, unknown>).message === "string";
const toErrorWithMessage = (maybeError: unknown): ErrorWithMessage => {
if (isErrorWithMessage(maybeError)) return maybeError;
try {
return new Error(JSON.stringify(maybeError));
} catch {
return new Error(String(maybeError));
}
};
const getErrorMessage = (error: unknown) => {
return toErrorWithMessage(error).message;
};
export { getErrorMessage };