extends e implements em TypeScript: qual a diferença?
Olá a todos! Comecei a estudar TypeScript depois de JavaScript e fiquei confuso com duas palavras-chave — `extends` e `implements`. Ambas parecem ser usadas para trabalhar com classes e interfaces, mas não entendo quando usar cada uma.
Tenho uma interface simples `Animal` que descreve propriedades e métodos básicos:
```typescript
interface Animal {
name: string;
makeSound(): void;
}
```
E quero criar uma classe `Dog`. Nos exemplos, vi que usam tanto `extends` quanto `implements`:
```typescript
// Opção 1: implements
class Dog implements Animal {
name: string;
constructor(name: string) {
this.name = name;
}
makeSound() {
console.log("Woof!");
}
}
// Opção 2: extends (se houvesse uma classe base)
class AnimalBase {
name: string;
constructor(name: string) {
this.name = name;
}
}
class Dog extends AnimalBase {
makeSound() {
console.log("Woof!");
}
}
```
Mas não entendo qual é a diferença fundamental. Quando usar