Objetivos
        
    
    
    
        
Erro customizado
    
    
        
            
                A linguagem TS permite que erros customizados sejam criados a partir de outras classes de erros 
                existentes. Nesta parte do tutorial vamos entender criar, adicionar atributos/métodos e lançar nossos próprios erros customizados.
            
         
     
    
        
Criando erro customizado
    
    
        
            
                Para criarmos nossas próprias exceções precisamos criar uma classe que herda os métodos e 
                propriedades da classe Error ou outra classe de erro desejada.
            
            Sintaxe
            class nome_erro extends Error
{
  //corpo
}
            
                No construtor de nossa exceção customizada, utilizamos um parâmetro para receber uma mensagem 
                informativa do erro e chamamos o construtor da classe super herdada.
            
            Sintaxe
            class nome_erro extends excecao_nativa
{
    constructor(mensagem:string )
    {
        super(mensagem);
    }
}
            
                Chamando o construtor da classe que herdamos, podemos utilizar as propriedades name, 
                message e stack e outros atributos.
            
            Exemplo 1
            
//erro customizado
class meuErro extends Error
{
  constructor(msg:string){ //construtor
    super(msg); //construtor da classe pai
  }
  metodo(){
    //omitido
  }
}
function funcao1():void {
  throw new meuErro("Um erro qualquer");
}
function funcao2():void {
  try {
    funcao1();
  } 
  catch (e:any) {
    console.log(e.name);
    console.log(e.message);
  }
}
funcao2();
            Saída
            Error
um erro qualquer
         
     
    
        Adicionando métodos e atributos
        
     
    
        
            
                As exceções customizadas aceitam métodos e atributos assim como qualquer outra classe que criamos até agora. 
                Tudo estudado sobre herança é aplicável.
            
            Exemplo 2
            
class meuErro extends Error
{
  private codigo:number = -1;
  constructor(msg:string,cod:number)
  {
    super(msg);
    this.name = "meuErro";
    this.codigo = cod;
  }
  metodo():void
  {
      console.log('metodo erro customizado');
  }
}
function funcao1():void
{
  throw new meuErro("Um erro qualquer",999);
}
function funcao2():void
{
  try 
  {
    funcao1();
  } 
  catch (e:any) 
  {
    console.log(e.name);
    console.log(e.message);
    console.log(e.codigo);
    e.metodo();
  }
}
funcao2();
            Saída
            meuErro
Um erro qualquer
meuErro
Um erro qualquer
999
metodo erro customizado
         
     
    
        
Lançando e relançando
    
    
        
            
                Não há diferença ao lançar ou relançar um exception customiza, exceto pelos atributos extras
                adicionados. O uso do comando throw é feito como já visto em outros exemplos.
            
            Exemplo 3
            
class meuErro extends Error
{
  constructor(msg: string)
  {
    super(msg);
  }
  
  metodo()
  {
     console.log("metodo customizado");
  }
}
function funcao1()
{
  throw new meuErro("Um erro qualquer");
}
function funcao2()
{
  try 
  {
    funcao1();
  } 
  catch (err: any)
  {
    console.log("funcao2:",err.message);
    throw err; //relançando
  }
}
function funcao3()
{
    try
    {
        funcao2()
    }
    catch(err: any){
        console.log(err.message);
        err.metodo();
    }
}
funcao3();
            Saída
            
funcao2: Um erro qualquer
Um erro qualquer
metodo customizado
         
     
    
        Histórico de atualizações
        
     
    
        
            
                - 29/08/2025 - revisão 2 - Ajustes: pontuais, exemplos, sintaxes, 'objetivos'; Adição: 'lançando e relançando'
 
                - 14/09/2024 - revisão 1 - Adição de método dentro de classe em Ex. 2, outros ajustes pontuais
 
                - 28/02/2024 - versão inicial
 
            
         
     
    
            
            
                
                    
                    Os cursos oferecidos nesta página são cursos fornecidos por parceiros. Ao comprar um curso clicando
                em seu banner, você está ajudando a manter o projeto TutorialDev vivo. Os sites dos cursos parceiros utilizam cookies.