Вопрос проверяет понимание механизма наследования типов в TypeScript через ключевое слово extends, которое необходимо для создания иерархий интерфейсов и классов.
Ключевое слово 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'
}; // КорректноВ обобщённых типах 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
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию