-
Notifications
You must be signed in to change notification settings - Fork 10
Expand file tree
/
Copy pathgetErrorMessage.ts
More file actions
30 lines (25 loc) · 829 Bytes
/
getErrorMessage.ts
File metadata and controls
30 lines (25 loc) · 829 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// https://kentcdodds.com/blog/get-a-catch-block-error-message-with-typescript
type ErrorWithMessage = {
message: string;
};
function isErrorWithMessage(error: unknown): error is ErrorWithMessage {
return (
typeof error === 'object' &&
error !== null &&
'message' in error &&
typeof (error as Record<string, unknown>).message === 'string'
);
}
function toErrorWithMessage(maybeError: unknown): ErrorWithMessage {
if (isErrorWithMessage(maybeError)) return maybeError;
try {
return new Error(JSON.stringify(maybeError));
} catch {
// Fallback in case there's an error stringifying the maybeError
// like with circular references for example
return new Error(String(maybeError));
}
}
export function getErrorMessage(error: unknown) {
return toErrorWithMessage(error).message;
}