Leitura recomendada
    
    
    
        
Objetivos
        
    
    
    
        
Interface
    
    
        
            
                As interfaces são um tipo de dado abstrato para especificarmos comportamentos 
                que uma classe deve seguir. As características de interfaces estão listadas abaixo:
            
            Características
            
                - Não possuem implementação
 
                - Possuem apenas de métodos abstratos
 
                - Não possuem construtor
 
                - Não podem ser instanciadas
 
                - Permitem utilizar herança múltipla
 
            
            
                A declaração de uma interface é feita utilizando a sintaxe abaixo. A palavra 
                reservada interface  para informar que a declaração de uma interface 
                está sendo feita.
            
            Sintaxe : import
            
interface Inome_interface {
    //corpo
}
            Exemplo 1
            
interface nome_interface {
    //corpo
}
            Saída
            
-
         
     
    
    
        
            
                O corpo de uma interface deve conter apenas os protótipos/assinatura dos métodos 
                que deverão ser seguidos podendo conter parâmetros e retornos se necessário.
            
            Sintaxe
            
interface Inome_interface {
    nome_metodo1( <lista_parametros> ): tipo_retorno;
}
            Exemplo 2
            
interface nome_interface {
    metodo1(p:number): number;
    metodo2():string;
    metodo3():void;
}
            Saída
            
-
            
                Os métodos que não possuem implementação são chamados de métodos abstratos. 
                Diferente dos métodos de classes abstratas, não utilizam a palavra reservada 
                abstract.
            
         
     
    
    
        
            
                Para que seja possível o uso de uma interface, precisamos criar uma classe e informar que um determinada 
                interface será herdada. Utilizando herança e a palavra reservada implements, 
                informamos que nossa classe está herdando um interface.
            
            Sintaxe
            
class nome_classe implements nome_interface {
    //corpo
}
            Exemplo 3
            
interface nome_interface {
    metodo(p:number): number;
}
class minha_classe implements nome_interface{
    //corpo
}
            Saída
            -
         
     
    
        Implementando métodos de interface
        
     
    
        
            
                A implementação dos métodos de uma interface é feita normalmente com qualquer nos 
                métodos já exemplificados.
            
            
                Os nomes dos parâmetros utilizados pelos métodos implementados não precisam 
                necessariamente coincidir com os nomes declarados na assinatura dos métodos de 
                uma interface, mas suas tipagem devem ser mantidas. 
            
            Exemplo 4
            
interface nome_interface {
    metodo(p:number): number;
}
class minha_classe implements nome_interface{
    //corpo
    public metodo(p:number):number {
        return p*2;
    }
}
            Saída
            
-
            
                Com o uso de interface, podemos ter N classes herdando de uma mesma interface 
                realizando as mesmas tarefas de forma diferente de acordo com cada necessidades.
            
            Exemplo 5
            
interface nome_interface {
    metodo1(p:number): number;
}
class minha_classe1 implements nome_interface{
    //corpo
    public metodo1(p:number):number {
        return p*2;
    }
}
class minha_classe2 implements nome_interface{
    //corpo
    public metodo1(p:number):number {
        return p*4;
    }
}
            Saída
            
-
         
     
    
    
        
            
                Para que seja possível o uso de mais de uma interface, precisamos criar uma classe 
                e informar que quais interfaces serão utilizadas como na sintaxe abaixo:
            
            Sintaxe
            
class minha_classe implements <lista_interfaces> {
    //corpo
}
            Onde
            <lista_interfaces>: lista de interfaces separadas por (,)
            Exemplo 6
            
interface nome_interface1 {
    metodo1(p:number): number;
}
interface nome_interface2 {
    metodo2(p:number): number;
}
class minha_classe implements nome_interface1, nome_interface2 {
    //corpo
    public metodo1(p:number):number {
        return p*2;
    }
    
    public metodo2(p:number):number {
        return p*3;
    }
}
            Saída
            -
            
                A linguagem TS permite também que a herança múltipla seja mista. Podemos utilizar a 
                herança de interfaces e classe concretas. Para tal, precisamos utilizar as palavras 
                reservadas extends e implements.
            
            Exemplo 7
            
interface nome_interface 
{
    metodo1(p:number): void;
}
class minha_classe1 
{
    public metodo2():void 
    {
        console.log("metodo2");
    }
}
class minha_classe2 extends minha_classe1 implements nome_interface 
{
    public metodo1(p:number):void 
    {
        console.log(p);
    }
    public metodo3(p:number):number {
        return p*3;
    }
}
            Saída
            -
         
     
    
    
        
            
                A lingugem TS permite que seja feita a extensão de uma interface adicionando 
                mais métodos. Assim, precisamos apenas herdar uma interface que irá contemplar 
                todos os métodos abstratos desejados.
            
            
                Para que a extensão de interface seja feita, utilizamos a palavras reservada 
                extends como pode ser observado na sintaxe a seguir.
            
            Sintaxe
            
interface interface_filha extends interface_pai {
    //corpo
}
            Exemplo 8
            
interface nome_interface1 //interface pai
{
    metodo1(p:number): void;
}
//interface filha
interface nome_interface2 extends nome_interface1
{
    metodo2(p:number): void;
}
class nome_classe implements nome_interface2 //interface pai
{
    metodo1(p:number):void{}
    metodo2(p:number):void{}
}
            Saída
            
-
            
                É importante observar que a extensão de interface não pode ser confundida com a 
                segregação de interface. Essa foi vista de forma superficial em herança múltipla 
                de interfaces.
            
         
     
    
        Histórico de atualizações
        
     
    
        
            
                - 28/08/2025 - revisão 2 - Ajustes: pontuais, objetivos e sintaxes 
 
                - 13/09/2024 - revisão 1 - correção em link 'Próximo', intro 'Herança de interface', ajustes gerais 
 
                - 29/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.