implements implements e classes como tipos
Última atualização: 2026-10-22
implements implements e classes como tipos
O implements faz uma classe reivindicar uma interface: o compilador verifica se a classe fornece cada membro exigido com os tipos compatíveis. A interface diz "o que ela pode fazer", a classe responde "como" — uma interface, muitas implementações diferentes.
| Grupo | Funções e Classes |
|---|---|
| Tipo | Sintaxe |
| Modo strict | Não necessário |
ℹ️ Info O editor transpila TypeScript para JavaScript e o executa (sem verificação de tipos); veja a Saída de cada exemplo para o resultado da verificação.
📝 Sintaxe
interface Storage {
save(key: string, value: string): void;
load(key: string): string | null;
}
class MemoryStorage implements Storage {
private map = new Map<string, string>();
save(key: string, value: string): void { this.map.set(key, value); }
load(key: string): string | null { return this.map.get(key) ?? null; }
}
⚙️ Parâmetros
| implements | Reivindica interfaces: várias de uma vez são permitidas (implements A, B); a verificação é "a classe satisfaz a interface" |
|---|---|
| extends + implements | Ambos podem ser combinados: class Foo extends Base implements Storage — herdar a implementação enquanto honra o contrato |
Retorno:Os tipos de retorno dos métodos devem corresponder aos da interface ou ser mais estreitos (covariância); os parâmetros devem ser mais amplos (contravariância) — senão, erro de compilação.
▶ Exemplo
Edite o código abaixo e clique em Testar para ver o resultado transpilado:
Saída:
dark null
(Saída de execução após a transpilação; apagar o método load ou mudar seu tipo de retorno para string gera um erro de compilação — o implements verifica membro a membro)
💡 Observações
ℹ️ Info O implements é uma verificação de tempo de compilação sem efeito em execução; após a transpilação a interface some e a classe é uma classe comum.
⚠️ Atenção Interfaces descrevem apenas membros públicos — campos private não fazem parte da verificação; em contrapartida, todo membro da interface deve existir na classe, sem exceções.
💡 Dica É a inversão de dependência na prática: o código de negócio depende da interface Storage, os testes injetam MemoryStorage, a produção injeta LocalStorage — o código de quem chama nunca muda.
🏷️ Funções e Classes Relacionadas
💡 Casos relacionados
Mais casos em breve.
📚 Tutoriais relacionados
❓ Perguntas frequentes
P implements vs extends?
R O extends herda implementação (pega código); o implements promete uma forma (pega um contrato). Uma classe estende uma base, mas pode implementar muitas interfaces.
P Uma classe pode ser atribuída a um tipo interface sem implements?
R Sim — o TS é estrutural, a forma por si basta. O implements acrescenta intenção explícita e faz "a interface mudou, a classe não" aparecer na definição da classe, em vez de em cada ponto de atribuição.
P Uma interface pode restringir um construtor?
R Sim, por meio de uma assinatura new: interface Ctor<T> { new (...args: any[]): T } — comum para tipos de registro de fábrica e contêiner.