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

  1. Tipo Error
  2. Recuperar informações
  3. Capturar mais de um erro
  4. Lançando um erro
  5. Relançando erro
  6. Stacktrace

Nesta parte do tutorial vamos estudar a classe Error que representa os erros ocorridos durante a execução de nossos programas em TS. Vamos estudar sobre o tipo Error, como capturar erros, como recuperar informações de erro e outros.

Um Erro, é um evento ou acontecimento não desejado que pode ocorrer durante a execução de nossos programas como: erros de acesso a memória, falhas ao abrir um arquivo e outros .

Quando esse tipo de evento acontece, um objeto de um tipo de Error ou derivado, é lançado para que seu tratamento seja feito. Esse objeto contém as informações sobre o erro ou falhas ocorridos.

Exemplos
  1. Error : Classe base de todos os erros/exeções
  2. RangeError: Valor acessado fora de um intervalo válido
  3. ReferenceError : variável não existe ou não foi iniciada

Quando um erro ocorre e precisamos obter algumas informações básicas como a mensagem do erro ou onde o erro ocorreu, utilizamos as propriedades da classe Error abaixo:

Propriedade Descrição
cause Retorna string conténdo a causa original do erro
columnNumber -
fileName Retorna string contendo nome do arquivo
message Retorna um string contendo mensagem de erro.
stack Retorna um string contendo a pilha de execução
name Retorna string contendo nome do tipo de erro
Exemplo 1
try
{
    funcao_inexistente();
}
catch(err:any) 
{
    console.log("cause:",err.cause);
    console.log("message:",err.message);
    console.log("stack:",err.stack);
}
Saída
"cause:",  undefined 
"message:",  "funcao_inexistente is not defined" 
"stack:",  "ReferenceError: funcao_inexistente is not defined
    at eval (eval at <anonymous> (runtime.js:121:17), <anonymous>:3:5)
    at runtime.js:121:17" 

Para ver o básico que foi estudado sobre gerenciamento de memória, visite Gerenciando Memória.

Em TS, diferente de outras linguagens que possuem o bloco try/catch, não permite que haja mais de um bloco catch. Para que a captura de mais de um erro ou exceção seja feita, precisamos utilizar if-else em conjunto com o operador instanceof.

Exemplo 2
try
{
      funcao1();
}
catch(err: any)
{
  if(err instanceof ReferenceError){
    console.log(err.message);
  }
  else if ( err instanceof TypeError){
    //tratamento
  }
}
Saída
funcao1 is not defined

Os comandos de decisão foram vistos em TypeScript: Comandos de Decisão. O uso do operador instanceof foi visto em TypeScript: Classe

Para lançarmos uma exceção/error explicitamente em nossos programas em TypeScript, utilizamos o comando throw seguindo de uma instância do error ou derivado que desejamos lançar.

Sintaxe
throw new classe_erro( <mensagem> );
Exemplo 3
try
{
    throw new Error("erro desconhecido");
}
catch(erro)
{
    console.log(erro.message);
}
Saída
erro desconhecido

O uso da palavra reservada new para instanciar objetos foi visto em TypeScript: Classe sendo a leitura recomendada.

No exemplo anterior, utilizamos o comando throw para lançar um erro explicitamente. Em alguns momentos, o tratamento da exceção não pode ser tratada em seu respectivo bloco catch.

Nesse caso, podemos relançar um erro para um escopo, acima do atual, utilizado o mesmo comando throw. O uso da palavra new é necessário:

Sintaxe
try
{
    //código
}
catch( err: any )
{
    throw err; //
}
Exemplo 4
function funcao1():void
{
    throw Error("erro desconhecido em funcao1"); //local original do erro
}
function funcao2():void
{
  try
  {
        funcao1();
  }
  catch(erro)
  {
      throw erro; //o erro não pode ser tratado aqui
  }  
}
function funcao3():void
{
  try
  {
      funcao2();
  }
  catch(erro)
  {
      console.log(erro.message); //tratamento do erro
  }  
}

funcao3();
Saída
erro desconhecido em funcao1

Com a abordagem acima recomendada, re-lançando um erro/exceção, as informações contidas no stack serão mantidas facilitando assim a análise do erro.

O Stacktrace armazena todas as chamadas a funções feitas em nossos programas até a linha em que uma erro foi lançado. Por ser uma Stack(Pilha) as chamadas são armazenadas umas sobres as outras sendo a linha que lançou a última.

Exemplo 5
function funcao1():void
{
    throw Error("erro desconhecido em funcao1");
}
function funcao2():void
{
  try
  {
        funcao1();
  }
  catch(erro)
  {
      throw erro;
  }  
}

function funcao3():void
{
  try
  {
      funcao2();
  }
  catch(erro)
  {
      console.log(erro.stack);
  }  
}

funcao3();
Saída
"Error: erro desconhecido em funcao1
    at funcao1 (eval at <anonymous> (runtime.js:121:17), main.ts:3:11)
    at funcao2 (eval at <anonymous> (runtime.js:121:17), main.ts:7:9)
    at funcao3 (eval at <anonymous> (runtime.js:121:17), main.ts:15:9)
    at eval (eval at <anonymous> (runtime.js:121:17), main.ts:21:1)
    at runtime.js:121:17" 
  1. 29/08/2025 - revisão 2 - Ajustes: pontuais, exemplos, 'objetivos' e sintaxes;
  2. 14/09/2024 - revisão 1 - remoção de link 'Gerenciando Memória', pequenos ajustes gerais
  3. 28/02/2024 - versão inicial