Avatar ·

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`؟