Clique sobre os tópicos listados abaixo para navegar até o conteúdo desejado.

  1. Bloco try-catch
  2. Múltiplos catchs
  3. Bloco finally
  4. Uso do try-catch

O gerenciamento de erros em TypeScript, de forma semelhante à outras linguagens como C# e Java que utiliza o bloco de teste de código try/catch/finally para testar, tratar erros e liberar recursos.

O bloco-try é utilizado para agrupar os trechos de código que serão executados em um programa. Caso algum erro ocorra, um objeto do tipo de dado Error contendo informações sobre o erro ocorrido será "lançado" pelo bloco-try.

Sintaxe
try
{
 //código para executar
}
//catch omitido

O bloco catch é utilizado para agrupar os trechos de código que são responsáveis pelo tratamento dos erros "lançados" pelo bloco-try. Um ou mais erros podem ser "capturados" pelo bloco-catch.

Sintaxe
try
{
 //código para executar
}
catch( err:any )
{
    //tratamento
}
Onde
err: Objeto que contém informações do erro ocorrido. any ou unknown para erro genérico.

Tanto o bloco-try quanto catch vistos nos exemplos, devem sempre "andar" juntos. O bloco finally pode ou não ser utilizado.

Exemplo 1
try
{
    //código para executar
}
catch( err:any )
{
    //código para tratar erros
}

No exemplo 2 abaixo vamos executar um trecho de código com o sem utilizar o bloco try-catch. A mensagem de erro é mostrada em sua respectiva saída.

Exemplo 2
funcao_inexistente();
Saída
"Erro:ReferenceError: funcao is not defined" 

No exemplo 3 abaixo vamos executar um trecho de código com o tratamento de erros utilizando os blocos try-catch. A mensagem do tratamento é mostrada em sua respectiva saída.

Exemplo 3
try
{
    funcao_inexistente();
}
catch(err: any) 
{
    console.log("ocorreu um erro");
}
Saída
"ocorreu um erro"

Em JS não podemos declarar múltiplos blocos catch como em outras linguagens. Para tratamento de mais de um tipo de erro, precisamos utilizar o comando de decisão if-else-if em conjunto do operador instanceof:

Sintaxe
try
{
 //código para executar
}
catch( err:any )
{
    if( err == instanceof tipo_erro1){
        //tratamento
    }
    else if ( err == instanceof tipo_erro2){
        //tratamento
    }
    else{
        //tratamento
    }
}
Exemplo 4
let obj = {
  nome: "fulano",
  metodo1: function(){
    console.log("executando metodo1");
  }
}
try {
  obj.metodo2(); //métodos não existe/definido
}
catch(err:any) {
  if( err instanceof TypeError)
    console.error("método1 não definido")
  else{
      console.error("outro erro",err.message)
  }
}
Saída
método1 não definido

Caso as informações do erro ocorrido no bloco try seja tratado de forma genérica, podemos omitir o objeto passado como argumento para o bloco catch.

Sintaxe
try{
     //código para executar
}
catch{
     //tratamento
}
Exemplo 5
let obj = {
  nome: "fulano",
  metodo1: function(){
    console.log("executando metodo1");
  }
}
try {
  obj.metodo2(); //métodos não existe/definido
}
catch{
     console.log("tratamento genérico")
}
Saída
tratamento genérico

Além dos blocos de código try-catch há outros bloco de código, não obrigatório, chamado finally, que é executado independente de terem sido executados os blocos catch.

Sintaxe
try {
  //corpo
}
catch(err: any) {
  //corpo
}
finally {
  //corpo
}

O finally pode ser utilizado tanto para finalizar ou resetar variáveis, liberar objetos, estrutura de dados dinâmicas instanciadas, arquivos e outros.

Exemplo 6
let obj = {
  nome: "fulano",
  metodo1: function(){
    console.log("executando metodo1");
  }
}

try {
  obj.metodo1();
}
catch(err:any) {
  console.log(err.message);
}
finally {
  obj = null;
  console.log("objeto liberado");
}
Saída
executando metodo1
objeto liberado

O bloco try-catch não deve ser codificado em todos os métodos de uma aplicação. Esse bloco deve ficar em pontos centrais para evitar excessos de blocos try-catch e também facilitar o log dos erros.

Exemplo 7
class classe1
{
	metodo(){
		console.log("classe1::metodo\n");
		//pode gerar exception
        //não usar try-catch
	}
}

class classe2
{
	metodo(){
		console.log("classe2::metodo\n");
		//pode gerar exception
        //não usar try-catch
	}
}

//main
//usar trycatch
let cls1 = new classe1();
let cls2 = new classe2();

try
{
    cls1.metodo();
    cls2.metodo();
}
catch(err: any)
{
    console.log("ocorreu um erro");
}
Saída
classe1::metodo
classe2::metodo

O bloco try-catch não deve ser utilizar para tratamento de entrada de dados do usuário como campos vazios ou valores com formato inválidos que são condições normais de ocorrer.

Exemplo 8: uso incorreto
class classe1
{
	public codigo;
	public nome;
}

cls = new classe1();

try
{
	//ENTRADA DO USUÁRIO OMITIDA
	
	if(cls.codigo == null)
	{
		//lançar exceção: "codigo não preenchido!"
	}
	if(cls.nome == null)
	{
		//lançar exceção: "nome não preenchido!"
	}
}
catch(err: any)
{
	console.log("ocorreu um erro");
	//tratamento
	//log
}
  1. 29/08/2025 - revisão 2 - Ajustes: pontuais, Exemplos, 'objetivos' e sintaxes; Adição: 'múltiplos catchs' e 'uso de try-catch'
  2. 14/09/2024 - revisão 1 - Correção em links 'Anterior', outros pequenos ajustes
  3. 28/02/2024 - versão inicial