AnyCompiler

Tratamento de Exceções (try/catch)

try/catch funciona igual ao JavaScript — o código que pode falhar vai dentro de try, e catch roda em vez de travar se algo lançar um erro.

try {
  const result = JSON.parse("not valid json");
} catch (error) {
  console.log("Could not parse JSON!");
}
Output
Could not parse JSON!

Por que o erro capturado é unknown

O JavaScript permite que você lance literalmente qualquer coisa — um string, um number, um objeto Error de verdade. Como o TypeScript não pode saber de antemão o que um determinado throw vai produzir, ele tipa o valor capturado como unknown em vez de any, o que te obriga a verificar seu tipo antes de usá-lo.

try {
  JSON.parse("not valid json");
} catch (error) {
  if (error instanceof Error) {
    console.log(`Error: ${error.message}`);
  }
}
Output
Error: Unexpected token o in JSON at position 1

error instanceof Error reduz o tipo de unknown para Error, que é o que realmente torna error.message acessível — acessar .message diretamente em um valor unknown seria um erro de compilação.

A seguir: type narrowing — o padrão geral por trás dessa verificação instanceof, e as outras formas como o TypeScript reduz tipos.