Skip to main content

typexinterfacexclasse

No TypeScript, interface, type, e class são três construções importantes para trabalhar com tipos e modelagem de dados. Embora possam parecer semelhantes, têm diferenças significativas em termos de uso, propósito e comportamento.


1. Interface

Uma interface no TypeScript é usada para definir a estrutura de um objeto ou contrato. Ela especifica quais propriedades e métodos um objeto deve ter.

Características:

  • Define um contrato para objetos, mas não gera código JavaScript.
  • Suporta herança através de extends.
  • Pode ser implementada por uma classe com a palavra-chave implements.

Exemplo:

interface User {
name: string;
email: string;
active: boolean;
}

const user: User = {
name: "John",
email: "john@example.com",
active: true,
};

Quando usar:

  • Quando você deseja descrever a forma de um objeto e manter a flexibilidade de extensão para contratos.

2. Type

Um type (alias de tipo) é usado para criar um nome para um tipo mais complexo. Ele é mais flexível do que uma interface, podendo representar tipos primitivos, uniões, interseções, etc.

Características:

  • Pode descrever objetos, funções, uniões (|), interseções (&), ou até mesmo tipos primitivos.
  • Não suporta herança como extends, mas suporta interseções para composição.
  • Pode ser mais sucinto e versátil do que uma interface.

Exemplo:

type User = {
name: string;
email: string;
active: boolean;
};

const user: User = {
name: "Jane",
email: "jane@example.com",
active: true,
};

Quando usar:

  • Quando você precisa de flexibilidade extra, como uniões, interseções ou tipos complexos.
  • Para tipos mais simples ou ad hoc.

Diferenças entre interface e type

AspectoInterfaceType
HerançaSuporta extends para herdar outra interface.Suporta interseções (&) para combinar tipos.
Tipos PrimitivosNão pode representar tipos primitivos diretamente.Pode representar tipos primitivos (e.g., type ID = string;).
União de TiposNão suportado diretamente.Suportado (e.g., `type Status = 'active'
ExtensibilidadePode ser extendida com múltiplas declarações.Não pode ser redefinida após a declaração.
PropósitoMelhor para contratos e forma de objetos.Melhor para tipos complexos e flexíveis.

3. Class

Uma classe no TypeScript é uma construção que combina tanto estrutura (como interfaces) quanto comportamento (métodos, lógica, etc.). Ela é transpilada para código JavaScript (ES6 ou inferior).

Características:

  • Define um modelo para criar objetos.
  • Pode incluir propriedades e métodos.
  • Pode implementar interfaces e estender outras classes.
  • É usada para lógica de negócio, além de apenas modelar dados.

Exemplo:

class User {
constructor(
public name: string,
public email: string,
public active: boolean
) {}

deactivate() {
this.active = false;
}
}

const user = new User("Alice", "alice@example.com", true);
user.deactivate();
console.log(user);

Quando usar:

  • Quando você precisa combinar dados e lógica.
  • Quando precisa criar objetos com comportamento (métodos).

Diferenças entre class, interface e type

AspectoClassInterfaceType
TranspilaçãoGera código JavaScript.Não gera código JavaScript.Não gera código JavaScript.
ComportamentoPode conter lógica (métodos).Não pode conter lógica.Não pode conter lógica.
Uso como ContratoPode implementar interfaces.Define contratos para objetos e classes.Define contratos, mas sem herança direta.
ReutilizaçãoSuporta herança e implementação.Suporta extends para compor contratos.Suporta interseções (&) para combinar tipos.
Exemplo de LógicaPode adicionar métodos diretamente.Apenas define a forma, sem lógica.Apenas define a forma, sem lógica.

Quando usar cada um?

  • Interface:

    • Se você está definindo contratos para objetos ou deseja usar polimorfismo com classes que implementam contratos.
    • Melhor para modelar objetos estáticos.
  • Type:

    • Se precisa de mais flexibilidade para criar uniões, interseções, ou representar tipos complexos.
    • Melhor para tipos dinâmicos ou combinados.
  • Class:

    • Se você precisa modelar dados e adicionar comportamento (métodos, lógica de negócio).
    • Melhor para trabalhar com POO (Programação Orientada a Objetos).

Conclusão

  • Interfaces e types são usadas para modelar a estrutura de dados, mas types são mais flexíveis e suportam tipos complexos.
  • Classes são usadas quando você precisa de objetos com comportamento e lógica.
  • Escolha interfaces para contratos, types para flexibilidade, e classes para objetos dinâmicos com comportamento.