When in TypeScript, this code:
try {
// Something...
} catch (error) {
console.log(error.message);
}Will throw an error:
'error' is of type 'unknown'.
Fix
Credits go to Kent C. Dotts who wrote about this in his Blog.
Use this helper function:
function getErrorMessage(error: unknown) {
if (error instanceof Error) return error.message
return String(error)
}Or if necessary, this more robust code:
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))
}
}
function getErrorMessage(error: unknown) {
return toErrorWithMessage(error).message
}