`catch` clauses type their parameter as `unknown` (under `useUnknownInCatchVariables`, the default in strict mode), since JavaScript allows throwing any value, not just `Error` instances.
ts
try {
riskyCall();
} catch (err) {
if (err instanceof Error) {
console.log(err.message);
} else {
console.log("Unknown error", err);
}
}An alternative to exceptions is a `Result` type that makes success/failure explicit in the return type, forcing callers to handle both cases instead of possibly forgetting a `try/catch`.
ts
type Result<T> = { ok: true; value: T } | { ok: false; error: string };
function parseAmount(input: string): Result<number> {
const n = Number(input);
return Number.isNaN(n) ? { ok: false, error: "not a number" } : { ok: true, value: n };
}