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
}