Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про TypeScript: TypeScript, extends, inheritance, interface, class, generic constraint

Как работает extends в TypeScript?

Вопрос проверяет понимание механизма наследования типов в TypeScript через ключевое слово extends, которое необходимо для создания иерархий интерфейсов и классов.

Короткий ответ

Ключевое слово extends в TypeScript используется для наследования. В классах оно позволяет одному классу унаследовать свойства и методы другого. В интерфейсах — расширить один интерфейс другим, объединяя их описания. В дженериках extends выступает как ограничение (constraint), указывая, что тип-параметр должен быть совместим с указанным типом. Это основа для построения иерархий и повторного использования кода.

Длинный ответ

Ключевое слово extends в TypeScript — это мощный инструмент для создания отношений "является" между типами, классами и даже параметрами обобщённых типов. Оно позволяет строить иерархии, избегать дублирования кода и обеспечивать строгую типизацию в сложных структурах.

Наследование классов

При использовании с классами extends реализует классическое ООП-наследование. Дочерний класс получает все свойства и методы родительского (кроме приватных) и может добавлять свои или переопределять существующие с помощью super.

class Animal {
  constructor(public name: string) {}
  move(distance: number = 0) {
    console.log(`${this.name} moved ${distance}m.`);
  }
}

class Dog extends Animal {
  bark() {
    console.log('Woof! Woof!');
  }
  // Переопределение метода
  move(distance = 5) {
    console.log('Running...');
    super.move(distance); // Вызов родительского метода
  }
}

const dog = new Dog('Rex');
dog.bark(); // Woof! Woof!
dog.move(); // Running...\nRex moved 5m.

Расширение интерфейсов

Для интерфейсов extends означает объединение описаний типов. Можно расширять несколько интерфейсов через запятую, создавая новый тип, который включает все свойства родителей.

interface Named {
  name: string;
}
interface Aged {
  age: number;
}
// Интерфейс Person включает свойства и из Named, и из Aged
interface Person extends Named, Aged {
  occupation: string;
}

const user: Person = {
  name: 'Alice',
  age: 30,
  occupation: 'Engineer'
}; // Корректно

Ограничение дженериков (Generic Constraints)

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

// Функция принимает только объекты, имеющие свойство length
function logLength(item: T): void {
  console.log(item.length);
}

logLength('hello'); // 5 (строка имеет .length)
logLength([1, 2, 3]); // 3 (массив имеет .length)
// logLength(42); // Ошибка: число не имеет .length

Вывод: Используйте extends для создания логических иерархий типов и классов, когда нужно выразить отношение "является разновидностью". Это ключевой механизм для повторного использования кода, обеспечения типобезопасности и моделирования предметной области в TypeScript.

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию

Уровень

  • Рейтинг:

    4

  • Сложность:

    3

Навыки

  • TypeScript

    TypeScript

Ключевые слова

#TypeScript

#extends

#inheritance

#interface

#class

#generic constraint

Подпишись на React Developer в телеграм

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию