Поиск по сайту
Ctrl + K
Вопросы по TS

Чем отличается extends от implements в TypeScript?

В TypeScript два ключевых слова, extends и implements, часто используются в контексте наследования и реализации типов. Но их предназначение и использование отличаются. Давайте рассмотрим их более подробно.

1. extends

Ключевое слово extends используется для наследования классов или интерфейсов. Когда один класс или интерфейс extends другой, он наследует его свойства и методы. Это позволяет создавать более специализированные версии базовых классов или интерфейсов.

Пример использования extends с классами

class Animal {
    name: string;
    
    constructor(name: string) {
        this.name = name;
    }

    speak() {
        console.log(`${this.name} издает звук`);
    }
}

class Dog extends Animal {
    speak() {
        console.log(`${this.name} гавкает`);
    }
}

const dog = new Dog("Шарик");
dog.speak(); // Шарик гавкает

В этом примере класс Dog наследует свойства и методы класса Animal. Метод speak переопределен в классе Dog, чтобы издать другой звук.

Пример использования extends с интерфейсами

interface Animal {
    name: string;
    speak(): void;
}

interface Pet extends Animal {
    owner: string;
}

const myPet: Pet = {
    name: "Мурка",
    owner: "Иван",
    speak: () => console.log("Мяу")
};

console.log(`У меня есть питомец ${myPet.name}, его владелец ${myPet.owner}.`);
myPet.speak(); // Мяу

Здесь интерфейс Pet наследует от интерфейса Animal, добавляя дополнительное свойство owner.

2. implements

Ключевое слово implements используется на уровне классов для указания, что класс реализует интерфейс. Это значит, что класс должен реализовывать все свойства и методы, описанные в интерфейсе.

Пример использования implements

interface Animal {
    name: string;
    speak(): void;
}

class Cat implements Animal {
    name: string;

    constructor(name: string) {
        this.name = name;
    }

    speak() {
        console.log(`${this.name} мяукает`);
    }
}

const cat = new Cat("Барсик");
cat.speak(); // Барсик мяукает

В этом примере класс Cat реализует интерфейс Animal, и мы видим, что он предоставляет реализацию для свойств и методов, описанных в интерфейсе.

Сравнение extends и implements

  • extends используется для создания нового класса на основе существующего или для создания нового интерфейса на основе другого интерфейса.
  • implements используется для обозначения того, что класс должен соответствовать определенному интерфейсу, обеспечивая реализацию всех его свойств и методов.

Таким образом, extends связан с наследованием, а implements — с реализацией интерфейсов, что позволяет обеспечить типобезопасность и структурированность в коде TypeScript.

Содержание:
Редактировать