extends و implements في TypeScript: ما الفرق؟
مرحبًا بالجميع! لقد بدأت للتو في تعلم TypeScript بعد JavaScript وأصبحت مرتبكًا بين كلمتين رئيسيتين — `extends` و `implements`. يبدو أن كلاهما يُستخدم للعمل مع classes و interfaces، لكنني لا أفهم متى أستخدم أيهما.
لدي interface بسيط `Animal` يصف الخصائص والطرق الأساسية:
```typescript
interface Animal {
name: string;
makeSound(): void;
}
```
وأريد إنشاء class `Dog`. في الأمثلة، رأيت استخدام كل من `extends` و `implements`:
```typescript
// الخيار 1: implements
class Dog implements Animal {
name: string;
constructor(name: string) {
this.name = name;
}
makeSound() {
console.log("Woof!");
}
}
// الخيار 2: extends (إذا كان هناك base class)
class AnimalBase {
name: string;
constructor(name: string) {
this.name = name;
}
}
class Dog extends AnimalBase {
makeSound() {
console.log("Woof!");
}
}
```
لكني لا أفهم الفرق الجوهري. متى أستخدم `extends` ومتى أستخدم `implements`؟